将字符串从数组推入正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字符串从数组推入正则表达式相关的知识,希望对你有一定的参考价值。
我有一个字符串数组,需要迭代,将每个字符串放入正则表达式中,然后将其输出存储在另一个数组中。如果我一次输入1个字符串,我可以使正则表达式正常工作,但不能使其遍历每个字符串。
这是我所拥有的:
results = []
arr = ["CAT", "DOG", "BIRD"]
for i in arr:
patt='(i)+'
string= contents
p=re.compile(patt)
replen=[sp.end()-sp.start() for sp in p.finditer(string)]
results.append(max(replen)/(len(patt)-3))
string = contents-我有一个txt文件,其中保存正在执行正则表达式的字符串。它已保存在内容中。如果我打印(字符串),它将正确输出txt文件字符串
我想做的是让程序查看存储在内容中的字符串,然后查看连续发现“ CAT”的次数(例如ABCATCATCATDEFHGICAT = 3)。我想将该数字存储在结果中,然后使用DOG和BIRD再次进行相同的操作。
如果我丢失了for循环并手动输入CAT或DOG或
patt='(i)+'
中的任何内容,一切正常,但是我需要它来遍历数组中的每个条目。
最小可重复答案:
results = []
arr = ["CAT", "DOG", "BIRD"]
patt='(CAT)+'
string= "ABCATCATCATCATDEFIJKCAT"
p=re.compile(patt)
replen=[sp.end()-sp.start() for sp in p.finditer(string)]
results.append(max(replen)/(len(patt)-3))
上面应该将4推入结果数组。
答案
使用string formatting构建模式。
arr = ["CAT", "DOG", "BIRD"]
for i in arr:
patt = '()+'.format(i)
...
或带有f-strings
arr = ["CAT", "DOG", "BIRD"]
for i in arr:
patt = f'(i)+'
...
另一答案
您正在使用文字i而不是变量i。如果您使用的是python> = 3.6,则可以使用fstrings并迅速进行处理。
但是您的代码中还有另一个问题,如果正则表达式即使一次都没有匹配,您将得到replen为None。我已修复它,因此它不取决于正则表达式的长度,而取决于找到的匹配项数(这是您想要的)。
results = []
arr = ["CAT", "DOG", "BIRD"]
for i in arr:
patt=f'(i)+'
string= contents
p=re.compile(patt)
replen=len([sp for sp in p.finditer(string)])
results.append(replen)
以上是关于将字符串从数组推入正则表达式的主要内容,如果未能解决你的问题,请参考以下文章