Python:如何在同一行中正则化出2个区域?
嗨,我想问一下如何做模拟正则表达式 我想把这两个数字都提取出来:3和74 我也有我的正则表达式模式Python:如何在同一行中正则化出2个区域?,python,regex,dictionary,expression,Python,Regex,Dictionary,Expression,嗨,我想问一下如何做模拟正则表达式 我想把这两个数字都提取出来:3和74 我也有我的正则表达式模式regex_1=re.compile(“%Id=”([0-9]*)”)*) 其目的是对3和74进行正则表达式,然后将每个结果存储到字典属性中,它们仍将位于同一个键、值对中。提取id值,并将其作为值插入到新的字典结构中: xpath(//Edge[@Id='3' or @Id='74']) 结果: import re text = "xpath(//Edge[@Id='3' or @Id='74'
regex_1=re.compile(“%Id=”([0-9]*)”)*)
其目的是对3和74进行正则表达式,然后将每个结果存储到字典属性中,它们仍将位于同一个键、值对中。提取id值,并将其作为值插入到新的字典结构中:
xpath(//Edge[@Id='3' or @Id='74'])
结果:
import re
text = "xpath(//Edge[@Id='3' or @Id='74'])"
pattern = re.compile(r".*Id='(\d+)'" * 2)
res = pattern.search(text)
print(res.groups())
new_storage = {
"first_id": res.group(1),
"second_id": res.group(2)
}
print(new_storage)
您是否希望将所有数值作为列表提取到预定义键中?谁能为你做以下工作
('3', '74')
{'first_id': '3', 'second_id': '74'}
或者,如果它们必须是
int
类型:
{'id': ['3', '74']}
您可以使用第一个匹配模式的xpath部分,然后使用\G
锚来获得迭代匹配。数字在第1组中捕获
{'id': [3, 74]}
部分地
非捕获组(?:
Matchxpath\(//
xpath(//
或|
断言上一个匹配的结尾,而不是字符串的开头\G(?!^)
关闭组)
匹配除@之外的任何字符,然后匹配[^@]*@
@
匹配除=”之外的任何字符,然后匹配[^=]*='
和开头的=
'
捕获组1,匹配1+个数字(\d+)
匹配”
”
(?:xpath\(//|\G(?!^))[^@]*@[^=]*='(\d+)'
输出
import regex
pattern = r"(?:xpath\(//|\G(?!^))[^@]*@[^=]*='(\d+)'"
s = "xpath(//Edge[@Id='3' or @Id='74'])"
print(regex.findall(pattern, s));
如果您可以使用PyPi正则表达式模块
(?:xpath\(//\G(?!^))[^@\r\n]*@[^\r\n=]*='(\d+)
或(?:xpath\(/\G(?!^))[^@\r\n]*@[^\r\n=]*='\K\d+(?='))
hi.这个正则表达式看起来很长,只是为了工作。我想我的老板不会批准我们的脚本中使用这样的正则表达式。它不是很长,但也考虑了xpath部分。它们实际上是同一模式的两个变体。hi.你的模式很巧妙。因此,你只是将模式扩展了一点,以显式地包含t其他“Id”是否存在?是的。此模式将捕获这两个Id值,随后可通过.groups()方法提取。您也可以只执行以下操作:pattern=re.compile(r.“*Id=”(\d+”)*2)
(?:xpath\(//|\G(?!^))[^@]*@[^=]*='(\d+)'
import regex
pattern = r"(?:xpath\(//|\G(?!^))[^@]*@[^=]*='(\d+)'"
s = "xpath(//Edge[@Id='3' or @Id='74'])"
print(regex.findall(pattern, s));
['3', '74']