我将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
有没有办法获得索引
抓取regex调用返回的"match object",您可以检查它:
这将显示字符串中匹配的部分,在本例中,这是获取所需内容的最简单方法
如果您的正则表达式包含组,并且您希望确切知道哪些组匹配,请使用
m.groups()
:应该只有一个值不是None,因此您可以获取其索引并在regex子字符串列表中查找regex。这里有一种方法可以用一行查找索引:
我建议您可以使用this website 在那里,当提供测试字符串时,您可以修补和调整正则表达式,并获得匹配的视觉反馈。此外,还为您忘记某些命令的罕见情况记录了语法;)
相关问题 更多 >
编程相关推荐