[英]Regex for a digit plus two characters like '1st', '2nd', '10th', '22nd'?
[英]Regex match no groups, 1st group OR 2nd group but not both. Something like 'NAND'
我不知道如何编写与这些匹配的正则表达式:
everyone hi
hi everyone
hi
但不是这个:
everyone hi everyone
正则表达式(?:everyone )?hi(?: everyone)?
也将匹配后者(这不是我想要的)。 如何制作这样的正则表达式? 还是只是不可能? 我无法进行足够的研究,因为我无法用正确的语言表达问题。 抱歉,如果我发布了重复
这是完成此操作的蛮力替代方法:
^(?:everyone +hi|hi(?: +everyone)?)$
正则表达式详细信息:
^
: 开始(?:
: 启动非捕获组
everyone
:匹配everyone
:+hi
: 匹配 1+ 个空格,后跟hi
|
: 或者hi
:匹配hi
:(?: +everyone)?
: 可选匹配 1+ 个空格,后跟everyone
)
: 结束非捕获组$
: 结束您可以使用行首和行尾标记为每种情况显式创建一个正则表达式(第一个将捕获两个)
(^hi( everyone)?$)
(^everyone hi$)
如果您需要在更大的文本中匹配这些文本,您可以使用
\b(?:everyone hi(?! everyone)|(?<!everyone )hi(?: everyone)?)\b
请参阅正则表达式演示。
细节
\b
- 单词边界(?:
- 非捕获组的开始:
everyone hi(?! everyone)
- everyone hi
好,后面没有空格和everyone
|
- 或者(?<?everyone )hi(:? everyone)?
- hi
(不是紧跟在everyone
和空格之前)和可选空格+ everyone
)
- 非捕获组的结束\b
- 单词边界使用PyPi 正则表达式,您可以拥有更强大的正则表达式:
\beveryone hi everyone\b(*SKIP)(*F)|\b(?:(?:everyone\s+)?hi(?:\s+everyone)?)\b
请参阅此正则表达式演示和此 Python 演示:
import regex
text = "everyone hi\nhi everyone\nhi\nBut not this:everyone hi everyone"
rx = r"\beveryone hi everyone\b(*SKIP)(*F)|\b(?:(?:everyone\s+)?hi(?:\s+everyone)?)\b"
print( regex.findall(rx, text) )
## => ['everyone hi', 'hi everyone', 'hi']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.