首页 > 解决方案 > Python正则表达式匹配两个字符串,如果另一个字符串不在之间

问题描述

我只想搜索AA*ZZ*包含XX.

对于 2 个字符串:

"IY**AA**BMDHRPONWUY**ZZ**"
"BV**AA**BDMYB**XX**W**ZZ**CKU"

如何仅将正则表达式与第一个匹配?

标签: pythonregex

解决方案


如果你只想匹配字符 AZ,你可以使用

AA(?:[A-WYZ]|X(?!X))*ZZ

解释

  • AA从字面上匹配
  • (?:
    • [A-WYZ]匹配除 X 之外的 AZ
    • |或者
    • X(?!X)匹配 X 并断言直接在右边的不是 X
  • )*关闭非捕获组并重复 0+ 次
  • ZZ从字面上匹配

正则表达式演示

如果还可以有其他字符,则另一个选项可能是使用与除 X 或空白字符之外的任何字符匹配的否定字符类: [^\sX]

AA(?:[^\sX]|X(?!X))*ZZ

正则表达式演示

另一种选择是使用缓和的贪婪令牌:

AA(?:(?!\btest\b).)*BB

正则表达式演示


推荐阅读