我有一个元素列表。列表中的每个元素都有一个以下格式的字符串值:
Name[wi ,(86)]Address[I]DOB[]Phone[]ACVSEQ[]
Name[wi ,(87)]Address[I]DOB[]Phone[]ACVSEQ[]
Name[wi ,(86)]Address[I]DOB[]Phone[]ACVSEQ[]
我只想提取数字。 数字始终位于 Name[wi, 它始终是相同的格式。
如何提取数字并将其存储在变量中以便我可以使用它?
我的 Python 代码将迭代元素,如果发现大于 86 的数字,则应返回 false,否则返回 true。
我当前的Python代码是:
def is_match_audit_code_displayed(self):
elements = self.driver.find_elements_by_xpath('//table[@id="reporting_view_report_dg_main_body"]//tr//td[4]//span')
for i in elements:
if "86" not in i.text:
print i.text
return True
return False
谢谢,里亚兹
使用alecxe答案我已将其包含在我的Python方法中。在元素列表中,使用正则表达式查找括号内的数值。对于列表中的每个项目,检查数值是否小于 86。如果是,则返回 true,否则返回 false。
这是完整的方法例程:
def is_match_audit_code_less_than_max_value_displayed_for_the_filter_report_results(self, max_code):
try:
elements = self.driver.find_elements_by_xpath('//table[@id="reporting_view_report_dg_main_body"]//tr//td[4]//span')
pattern = re.compile(r"Name\[wi ,\((\d+)\)\]")
for element in elements:
value = pattern.findall(element.text)
if len(value) != 1:
return False
value = int(value[0])
if value > max_code: # e.g. max_code is 86
return False
return True
except NoSuchElementException, e:
print value
print "Element not found "
print e
screenshot_name = elements + value + get_datetime_now()
self.save_screenshot(screenshot_name)
最佳答案
您可以使用正则表达式:
import re
elements = self.driver.find_elements_by_xpath('//table[@id="reporting_view_report_dg_main_body"]//tr//td[4]//span')
pattern = re.compile(r"Name\[wi ,\((\d+)\)\]")
for element in elements:
print(pattern.findall(element.text))
在 Name\[wi ,\((\d+)\)\]
表达式中,我们必须转义 [
, ]
, (
和 )
因为这些字符在正则表达式中具有特殊含义。 (\d+)
部分是一个捕获组,可以提取一个或多个数字。
关于regex - Selenium Python 如何使用正则表达式查找字符串值中的 2 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36041129/