有没有办法看一行是否包含与一组正则表达式模式匹配的单词?如果我有[regex1, regex2, regex3],并且我想看一条线是否匹配其中任何一条,我该怎么做?现在,我正在使用re.findall(regex1, line),但它一次只匹配1个正则表达式.
我有一个字符串和三个要匹配的模式,我使用python re包。具体来说,如果找到模式之一,则输出“不喜欢”,否则,输出“喜欢”。有关这三种模式的简要信息:
模式1:检查字符串中的所有字符是否均为大写字母
模式2:检查连续字符是否相同,例如
AA,BB...pattern3:检查是否
XYXY存在模式,X并且Y可以相同,并且该模式中的字母不需要彼此相邻。
当我分别编写模式时,程序将按预期运行。但是,当我使用交替组合三种模式时|,结果是错误的。我已经检查了stackoverflow帖子,例如,在这里和这里。提供的解决方案对我不起作用。
这是可以正常工作的原始代码:
import sys
import re
if __name__ == "__main__":
pattern1 = re.compile(r"[^A-Z]+")
pattern2 = re.compile(r"([A-Z])\1")
pattern3 = re.compile(r"([A-Z])[A-Z]*([A-Z])[A-Z]*\1[A-Z]*\2")
word = sys.stdin.readline()
word = word.rstrip('\n')
if pattern1.search(word) or pattern2.search(word) or pattern3.search(word):
print("Dislikes")
else:
print("Likes")
Run Code Online (Sandbox Code Playgroud)
如果我使用以下代码将3种模式组合为一种,则可能是错误的:
import sys
import re
if __name__ == "__main__":
pattern = r"([A-Z])[A-Z]*([A-Z])[A-Z]*\1[A-Z]*\2|([A-Z])\1|[^A-Z]+"
word = sys.stdin.readline()
word = word.rstrip('\n')
if re.search(word, pattern):
print("Dislikes")
else:
print("Likes") …Run Code Online (Sandbox Code Playgroud) 我在 $subject 上应用的替换很少,但我不想让旧替换 #(1 .. i-1) 的输出与当前替换 #i 匹配。
$subject1 = preg_replace($pat0, $rep0, $subject0);
$subject2 = preg_replace($pat1, $rep1, $subject1);
$subject3 = preg_replace($pat2, $rep2, $subject2);
Run Code Online (Sandbox Code Playgroud)
我尝试将一个preg_replace与数组用于模式和替换,希望它能够立即实现;但结果证明只是连续调用简单的preg_replace(当然有一些优化)
在我阅读了preg_replace_callback 之后,我想这不是一个解决方案。
有什么帮助吗?