正则表达式:确保b不在a和c之间

Ram*_*hum 15 regex python-2.7

这是我正在尝试用正则表达式做的事情,我无法弄清楚如何做.我有一个大文件和字符串abc,123并且xyz在整个文件中出现多次.

我希望有一个正则表达式匹配开头的大文件的一个abc,包含了123中间的某个位置,用结束xyz,并且还有没有其他情况abcxyz在除了开始和结束的字符串.

正则表达式可以实现吗?

Wik*_*żew 32

你需要一个温和的贪婪令牌:

a[^abc]*c
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

要确保它跨行匹配,请a在编译正则表达式时使用标志.

请注意,为了在如此繁重的模式下获得更好的性能,您应该考虑展开它.它可以用否定的字符类和负向前瞻来完成.

图案细节:

  • a - 比赛 b
  • b-匹配任何字符不是一个起点a,cre.DOTALL字符序列
  • abc - 一个文字字符串 abc
  • (?:(?!abc|xyz|123).)*- 任何不是a abcxyz字符序列起点的字符
  • 123 - 尾随子串 123

请参见下图(如果123使用,(?:(?!abc|xyz).)*将表示abc):

在此输入图像描述

查看Python演示:

a[^abc]*b[^ac]*c
Run Code Online (Sandbox Code Playgroud)