提示需要使用正则表达式环视
Hint on using a regex lookaround needed
假设有一个序列 ...a...b...a...b...c... ,其中 a,b 和 c 是字符串常量。点表示 a、b 和 c 之间任意数量的其他(不是 a、b 或 c)符号。
我想以最懒惰的方式匹配 "a...b...c"(最后一个 a-b-c 三元组),但正则表达式引擎抓住了更大的 "a...b...a...b...c" 并走得更远。
我尝试使用 a\w+b\w+(?!a)\w+c
或 a\w+b\w+?(?!a)\w+?c
等形式的否定前瞻,但到目前为止没有成功。
没有必要为此使用环视。将.*
放在正则表达式的开头,将要匹配的内容放入捕获组:
.*(a.*b.*c)
然后使用.group(1)
获取捕获组的内容
开头的贪心.*
让这个找到了最后一个黑社会
你需要在这三个部分之间使用tempered greedy tokens。
假设 a
是 abc
,b
是 bff
,c
是 cca
。然后,您将使用
(?s)abc(?:(?!abc).)*?bff(?:(?!abc).)*?cca
详情:
(?s)
- 与 re.S
或 re.DOTALL
修饰符相同,使 .
匹配换行符
abc
- 文字字符串 abc
或某种模式 #1
(?:(?!abc).)*?
- 除换行符之外的任何 0+ 个字符,不开始 abc
序列,尽可能少
bff
- 文字字符串 bff
或某种模式 #2
(?:(?!abc).)*?
- 见上文
cca
- 文字字符串 cca
或某种模式 #3
假设有一个序列 ...a...b...a...b...c... ,其中 a,b 和 c 是字符串常量。点表示 a、b 和 c 之间任意数量的其他(不是 a、b 或 c)符号。
我想以最懒惰的方式匹配 "a...b...c"(最后一个 a-b-c 三元组),但正则表达式引擎抓住了更大的 "a...b...a...b...c" 并走得更远。
我尝试使用 a\w+b\w+(?!a)\w+c
或 a\w+b\w+?(?!a)\w+?c
等形式的否定前瞻,但到目前为止没有成功。
没有必要为此使用环视。将.*
放在正则表达式的开头,将要匹配的内容放入捕获组:
.*(a.*b.*c)
然后使用.group(1)
获取捕获组的内容
开头的贪心.*
让这个找到了最后一个黑社会
你需要在这三个部分之间使用tempered greedy tokens。
假设 a
是 abc
,b
是 bff
,c
是 cca
。然后,您将使用
(?s)abc(?:(?!abc).)*?bff(?:(?!abc).)*?cca
详情:
(?s)
- 与re.S
或re.DOTALL
修饰符相同,使.
匹配换行符abc
- 文字字符串abc
或某种模式 #1(?:(?!abc).)*?
- 除换行符之外的任何 0+ 个字符,不开始abc
序列,尽可能少bff
- 文字字符串bff
或某种模式 #2(?:(?!abc).)*?
- 见上文cca
- 文字字符串cca
或某种模式 #3