首页 > 解决方案 > 如何匹配 A 和 B 之间的所有内容但不跨越预定义单词的边界

问题描述

我需要一个正则表达式,以便它匹配从"Hello"到并包括"everyone"的所有内容,以及介于两者之间的任何字符。如果在“Hello”“everyone”之间找到“ and ” ,则表达式必须失败。

所以这个字符串“Hello you and everyone”必须失败,但是这个“Hello you everyone”必须匹配。

我试图实现它是这样的:

Hello.*?((?!and)){1}everyone

但它不会失败并且

https://regex101.com/r/mX51ru/150

标签: pythonregex

解决方案


你可以做:

^(?!Hello.*?\band\b.*?everyone)Hello.*?everyone
  • ^匹配行首
  • (?!Hello.*?\band\b.*?everyone)是一个零宽度的负前瞻模式,以确保单词and不会介于两者之间Hello并且everyone
  • Hello.*?everyoneHello匹配具有和everyone在行中的所需输入

例子:

In [1925]: str_1 = 'Hello you everyone'                                                                                                                                                                     

In [1926]: str_2 = 'Hello you and everyone'                                                                                                                                                                 

In [1927]: re.search(r'^(?!Hello.*?\band\b.*?everyone)Hello.*?everyone', str_1)                                                                                                                             
Out[1927]: <re.Match object; span=(0, 18), match='Hello you everyone'>

In [1928]: re.search(r'^(?!Hello.*?\band\b.*?everyone)Hello.*?everyone', str_2) is None                                                                                                                     
Out[1928]: True

推荐阅读