gpt4 book ai didi

python - 生成要在 re.match() 中使用的正则表达式字符串

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:32 28 4
gpt4 key购买 nike

我正在尝试将一个字符串用作正则表达式字符串。
在下面的代码中:
_pattern是类似 abba 的模式我正在尝试检查 _string遵循 _pattern (例如 catdogdogcat )

rxp以下代码中是我尝试创建的正则表达式以匹配 _string (例如,对于上面的示例,它将是 (.+)(.+)\\2\\1 )。正在成功生成。但是re.match()正在返回None

我想了解为什么它不起作用以及如何纠正它?

import re

_pattern = "abba" #raw_input().strip()
_string = "catdogdogcat" #raw_input().strip()
hm = {}
rxp = ""
c = 1
for x in _pattern:
if hm.has_key(x):
rxp += hm[x]
continue
else:
rxp += "(.+)"
hm[x]="\\\\"+str(c)
c+=1

print rxp
#print re.match(rxp,_string) -> (Tried) Not working
#print re.match(r'rxp', _string) -> (Tried) Not working

print re.match(r'%s' %rxp, _string) # (Tried) Not working

输出
(.+)(.+)\\2\\1
None

预期输出
(.+)(.+)\\2\\1
<_sre.SRE_Match object at 0x000000000278FE88>

最佳答案

问题是你的正则表达式字符串变量有两个 \\ 而不是一个。

您可以使用

rxp.replace("\\\\", "\\")

.match中,如下所示:

>>> print re.match(rxp.replace("\\\\", "\\"), _string)
<_sre.SRE_Match object at 0x10bf87c68>

>>> print re.match(rxp.replace("\\\\", "\\"), _string).groups()
('cat', 'dog')
<小时/>

编辑:

您还可以避免出现双重 \\ ,如下所示: 导入重新

_pattern = "abba" #raw_input().strip()
_string = "catdogdogcat" #raw_input().strip()
hm = {}
rxp = ""
c = 1
for x in _pattern:
if x in hm:
rxp += hm[x]
continue
else:
rxp += "(.+)"
hm[x]="\\" + str(c)
c+=1

print rxp
print re.match(rxp,_string)

关于python - 生成要在 re.match() 中使用的正则表达式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39726805/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com