在我通过正则表达式传递的模式中,哪种模式是匹配的?

2024-05-19 05:52:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我将regexp与pyhton和库re一起使用。我传递的正则表达式包含字符串的许多可能变体,例如:

myRExp = ("aaaaa|bbbbb|ccccc|ddddd")

这就是我要匹配完整正则表达式所做的

# read a file with two columns
df = pd.read_csv('a_file.csv')
# get second column and create a unique regular expression
myRExp = "|".join(df[df.columns[1]])
# now test if line contains myRExp
if re.match(myRExp, line):
  # get the actual matching pattern and do something with it

我需要做的是知道myRExp中的哪个子字符串实际上与行匹配,即“aaaaa”、“bbbbb”、“ccccc”或“ddddd”之间的哪个子字符串匹配

编辑

让我们来举个例子。这是我的正则表达式:

>>> linE = 'zzzzbbdbbxxx'
>>> myRExp = "(aa[a|b]a)|(bb[c|d]bb)|(ccc[d|c]c)"

通过re.match()我现在可以匹配它并获得这个输出(注意,我在这里使用搜索来说明我的观点):

# do we have a match? (yes)
>>> matched = re.search(myRExp, linE)
# show groups: I partially care
>>> matched.groups(0)
(0, 'bbdbb', 0)

此时,我需要的是匹配的正则表达式的索引:匹配是(bb[c | d]bb),那么输出应该是2,即myRExp中该正则表达式组的索引:

index of matched.groups(0) in myRExp

有没有办法获得索引


Tags: 字符串redfreadmatchwithfilegroups
2条回答

抓取regex调用返回的"match object",您可以检查它:

m = re.match(myRExp, line)
if m:
    print("Matched", m.group(0))

这将显示字符串中匹配的部分,在本例中,这是获取所需内容的最简单方法

如果您的正则表达式包含组,并且您希望确切知道哪些组匹配,请使用m.groups()

>>> probe = "(orange)|(or)|(or.*)"
>>> m = re.match(probe, 'order')
>>> m.groups()
(None, 'or', None)

应该只有一个值不是None,因此您可以获取其索引并在regex子字符串列表中查找regex。这里有一种方法可以用一行查找索引:

>>> match_index = list(map(bool, m.groups())).index(True)

我建议您可以使用this website 在那里,当提供测试字符串时,您可以修补和调整正则表达式,并获得匹配的视觉反馈。此外,还为您忘记某些命令的罕见情况记录了语法;)

相关问题 更多 >

    热门问题