[英]Python Regex Matching Two Strings If another String not Between
我只想在*
不包含XX
搜索AA*ZZ
。
对于 2 个字符串:
"IY**AA**BMDHRPONWUY**ZZ**"
"BV**AA**BDMYB**XX**W**ZZ**CKU"
如何仅将正则表达式与第一个匹配?
发布我对问题的原始评论作为答案
除了已经发布的“单一正则表达式”解决方案之外,请考虑以下解决方案:
AA
和ZZ
之间任何文本的所有匹配项,例如使用此正则表达式: AA(.+)ZZ
。 将所有匹配项存储在列表中。XX
的那些。 您甚至不需要为此使用 Regex,因为包括 Python 在内的大多数语言都有专用的字符串方法。你得到的回报是一个干净的解决方案,没有任何复杂的正则表达式。 它易于阅读,易于维护,如果要添加任何新条件,它们可以应用于最终结果。
用一些代码来支持它(你可以在这里测试):
import re
test_str = """
IYAABMDHRPONWUYZZ
BVAABDMYBXXWZZCKU
"""
# First step: find all strings between AA and ZZ
match_results = re.findall("AA(.+)ZZ", test_str, re.I)
# Second step: filter out the ones that contain XX
final_results = [match for match in match_results if not ("XX" in match)]
print(final_results)
至于分配给final_results
的部分,它被称为列表理解。 由于这不是问题的一部分,我不会在这里解释。
我的猜测是,您可能(但不确定)想要设计一个类似于以下内容的表达式:
^(?!.*(?=AA.*XX.*ZZ).*).*AA.*ZZ.*$
import re
regex = r"^(?!.*(?=AA.*XX.*ZZ).*).*AA.*ZZ.*$"
test_str = """
IYAABMDHRPONWUYZZ
BVAABDMYBXXWZZCKU
AABMDHRPONWUYXxXxXxZZ
"""
print(re.findall(regex, test_str, re.M))
['IYAABMDHRPONWUYZZ', 'AABMDHRPONWUYXxXxXxZZ']
该表达式在regex101.com 的右上角面板中进行了解释,如果您希望探索/简化/修改它,并且在此链接中,您可以观看它如何与某些示例输入匹配,如果您愿意的话。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.