[英]how to use python regex find matched string?
对于字符串"//div[@id~'objectnavigator-card-list']//li[@class~'outbound-alert-settings']"
"@..'...'"
"//div[@id~'objectnavigator-card-list']//li[@class~'outbound-alert-settings']"
,我想查找"@..'...'"
例如"@id~'objectnavigator-card-list'"
或"@class~'outbound-alert-settings'"
。 但是当我使用正则表达式((@.+)\\~(\\'.*?\\'))
,它会找到"@id~'objectnavigator-card-list']//li[@class~'outbound-alert-settings'"
。 那么如何修改正则表达式以成功找到字符串呢?
在内括号上使用非捕获的,非贪婪的修饰符,并搜索不作为终止符的字符,例如:
re.findall(r"((?:@[^\~]+)\~(?:\'[^\]]*?\'))", test)
在测试字符串上返回:
["@id~'objectnavigator-card-list'", "@class~'outbound-alert-settings'"]
将您想匹配的字符限制在引号之间,以使其与引号不匹配:
>>> re.findall(r'@[a-z]+~\'[-a-z]*\'', x)
我发现仅查找我知道将要出现在匹配部分中的字符比从更宽容的匹配中省略字符要容易得多。
对于当前测试字符串的输入,您可以尝试以下模式:
import re
a = "//div[@id~'objectnavigator-card-list']//li[@class~'outbound-alert-settings']"
# find everything which begins by '@' and neglect ']'
regex = re.compile(r'(@[^\]]+)')
strings = re.findall(regex, a)
# Or simply:
# strings = re.findall('(@[^\\]]+)', a)
print(strings)
输出:
["@id~'objectnavigator-card-list'", "@class~'outbound-alert-settings'"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.