将字符串从数组推入正则表达式

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))
  1. string = contents-我有一个txt文件,其中保存正在执行正则表达式的字符串。它已保存在内容中​​。如果我打印(字符串),它将正确输出txt文件字符串

  2. 我想做的是让程序查看存储在内容中的字符串,然后查看连续发现“ CAT”的次数(例如ABCATCATCATDEFHGICAT = 3)。我想将该数字存储在结果中,然后使用DOG和BIRD再次进行相同的操作。

  3. 如果我丢失了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)

以上是关于将字符串从数组推入正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?

javascript - 将字符串与正则表达式数组匹配

基于正则表达式从字符串中提取字符串数组? - 斯威夫特

Java正则表达式

将字符串数组减少到最小的正则表达式值

如何将此正则表达式替换从替换单个单词更改为替换单词数组?