2

在python中,假设我想搜索字符串

"123" 

对于模式的出现

"abc|1.*|def|.23" .

我目前会这样做:

import re
re.match ("abc|1.*|def|.23", "123") .

上面返回一个匹配对象,我可以从中检索字符串中匹配项的开始和结束索引,在本例中为 0 和 3。

我的问题是:如何检索与匹配的正则表达式中的特定单词

"123" ?

换句话说:我想得到“1.*”和“.23”。这可能吗?

4

2 回答 2

3

另一种方法是为交替中的每个令牌创建一个捕获组:

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)

Python代码

于 2020-08-01T01:34:59.747 回答
3

鉴于您的字符串总是有一个共同的分隔符 - 在我们的例子中是“|”

你可以试试:

str = "abc|1.*|def|.23"

matches = [s for s in str.split("|") if re.match(s, "123")]
print(matches)

输出:

['1.*', '.23']
于 2020-08-01T01:01:01.857 回答