python - 如何匹配 A 和 B 之间的所有内容但不跨越预定义单词的边界
问题描述
我需要一个正则表达式,以便它匹配从"Hello"到并包括"everyone"的所有内容,以及介于两者之间的任何字符。如果在“Hello”和“everyone”之间找到“ and ” ,则表达式必须失败。
所以这个字符串“Hello you and everyone”必须失败,但是这个“Hello you everyone”必须匹配。
我试图实现它是这样的:
Hello.*?((?!and)){1}everyone
但它不会失败并且
解决方案
你可以做:
^(?!Hello.*?\band\b.*?everyone)Hello.*?everyone
^
匹配行首(?!Hello.*?\band\b.*?everyone)
是一个零宽度的负前瞻模式,以确保单词and
不会介于两者之间Hello
并且everyone
Hello.*?everyone
Hello
匹配具有和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
推荐阅读
- javascript - 动态创建的 DOM 未显示在组件中
- git - 子分支的 Git 拉取请求
- javascript - jquery 数据表:“未捕获的类型错误:无法读取未定义的属性‘长度’”在销毁和重新初始化后。表作为数据源
- javascript - Webrtc ICE 候选人之间的对等交换
- javascript - 浏览器关闭时的浏览器通知
- java - 如何使用 Java 图形?
- php - “传递给 ApiPlatform\Core\Bridge\Doctrine\Orm\Metadata\Property\DoctrineOrmPropertyMetadataFactory::__construct() 的参数 1 必须是一个实例......”
- javascript - ngIf* 与 Or (||) 比较不起作用
- javascript - 提取具有不同类型数据的缓冲区
- c# - 为什么 WebResponse 会截断 XML?