在python中,假设我想搜索字符串
"123"
对于模式的出现
"abc|1.*|def|.23" .
我目前会这样做:
import re
re.match ("abc|1.*|def|.23", "123") .
上面返回一个匹配对象,我可以从中检索字符串中匹配项的开始和结束索引,在本例中为 0 和 3。
我的问题是:如何检索与匹配的正则表达式中的特定单词
"123" ?
换句话说:我想得到“1.*”和“.23”。这可能吗?
在python中,假设我想搜索字符串
"123"
对于模式的出现
"abc|1.*|def|.23" .
我目前会这样做:
import re
re.match ("abc|1.*|def|.23", "123") .
上面返回一个匹配对象,我可以从中检索字符串中匹配项的开始和结束索引,在本例中为 0 和 3。
我的问题是:如何检索与匹配的正则表达式中的特定单词
"123" ?
换句话说:我想得到“1.*”和“.23”。这可能吗?
另一种方法是为交替中的每个令牌创建一个捕获组:
import re
s = 'def'
rgx = r'\b(?:(abc)|(1.*)|(def)|(.23))\b'
m = re.match(rgx, s)
print(m.group(0)) #=> def
print(m.group(1)) #=> None
print(m.group(2)) #=> None
print(m.group(3)) #=> def
print(m.group(4)) #=> None
此示例显示匹配已'def'
被第 3 个捕获组匹配(def)
。
鉴于您的字符串总是有一个共同的分隔符 - 在我们的例子中是“|”
你可以试试:
str = "abc|1.*|def|.23"
matches = [s for s in str.split("|") if re.match(s, "123")]
print(matches)
输出:
['1.*', '.23']