python-3.x - 如何在特定模式之后或在另一个特定模式之前匹配单词?
问题描述
我必须在一个特定模式之后或另一个特定模式之前匹配一个单词。因此,它应该匹配<pattern_1> <word>
或<word> <pattern_2>
。我可以使用|
.
regex_pattern = r'((?<=pattern_1)word|word(?=pattern_2)'
但是,有没有更好的方法?
解决方案
我建议使用
(?<=(pattern_1 ))?word(?(1)|(?=( pattern_2)))
(?<=(pattern_1 ))?word(?(1)| pattern_2)
请参阅正则表达式演示。详情:
(?<=(pattern_1 ))?
- 一个后视构造,可选地需要一个pattern 1
子字符串(捕获到组 1中)紧挨当前位置的左侧word
- 一个字符串(?(1)|(?=( pattern_2)))
- 执行以下操作的条件构造:?(1)
- 如果第 1 组匹配,则不执行任何操作|
- 别的(?=( pattern_2))
- 一个积极的前瞻,匹配并立即捕获pattern_2
当前位置右侧的字符串。看来您也可能只使用pattern_2
而不是前瞻模式(但那时它不会被捕获)。
推荐阅读
- xcode - 如何在 Xcode 中移动文件而不会导致“在范围内找不到‘文件名’”?
- python - 提取标记类时的空列表
- javascript - 如何在多个地方使用单个组件?
- python - 用于外部 API 调用的可浏览 Django REST API 包装器
- php - 致命错误:无法声明类 XMLParser,因为该名称已在第 17 行的 C:\Apache24\htdocs\inc\class_xml.php 中使用
- entity-framework - Entity Framework Core 3.1 - 创建安全的自引用一对多关系
- python - 使用跟踪时 Spinbox IntVar textvariable 上的 get() 错误
- php - PHP 中的 FTP_PUT 和远程文件系统
- python - 编写代码以在 sklearn 中生成两个圆,半径 r1=2 和 r2=5,中心位于 (5,3)
- python - blender api image.save() 总是创建纯黑色图像