三点能量

2024-04-26 02:23:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常具体的regex请求。我需要匹配字符串

  • 包含“m”
  • 不包含“phys\”(总是在“m\”之后有一些字符)
  • 不是以“形状”结尾。你知道吗

当只使用第一个和最后一个条件时,这个正则表达式似乎工作得很好:

^.*m_.*(?<!Shape)$

但当我加入中间标准时,我就迷路了。你知道吗


Tags: 字符串标准结尾条件字符regex形状shape
3条回答

这可以通过Python中的普通字符串方法实现(为了清楚起见,我添加了括号):

("m_" in input) and ("phys_" not in input) and (not input.endswith("Shape"))

我将(总是在“m”后面的一些字符)解释为“phys”从不出现在“m”前面的提示,而不是允许“phys”出现在“m”前面的情况通过。你知道吗

你想要的正则表达式是

^(?=.*m_)(?!.*phys_)(?!.*Shape$).*$

它将捕获整个字符串,每个条件都在它自己的展望中。您可以对它进行测试,并看到www.debuggex.com上发生的事情的可视化。你知道吗

import re

r = re.compile(r'^(?=.*m_)(?!.*m_.+phys_)(?!.+Shape$)')
print r.match("aaa")
print r.match("aaa m_ xx")
print r.match("aaa m_ xx Shape")
print r.match("aaa m_ xx phys_ foo")

基本原则是:

  ^
  (?= .* should be there)
  (?! .* should not be there)

相关问题 更多 >