如何使用python正则表达式找到匹配的字符串?

时间:2017-05-15 03:12:59

标签: python regex

对于字符串"//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'"。那么如何修改正则表达式以成功找到字符串?

3 个答案:

答案 0 :(得分:3)

在内部括号上使用非捕获,非贪婪的修饰符,而不是搜索终止字符,例如:

 re.findall(r"((?:@[^\~]+)\~(?:\'[^\]]*?\'))", test)

在测试字符串上返回:

 ["@id~'objectnavigator-card-list'", "@class~'outbound-alert-settings'"]

答案 1 :(得分:1)

限制引号之间匹配的字符与引号不匹配:

>>> re.findall(r'@[a-z]+~\'[-a-z]*\'', x)

我发现只查找我知道将在匹配部分中的字符更容易,而不是从更宽松的匹配中省略字符。

答案 2 :(得分:1)

对于当前测试字符串的输入,您可以尝试以下模式:

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'"]