正则表达式在同时匹配另一个组时否定一个字符组

Regex Negating a character group while matching another group at the same time

我正在尝试创建一个正则表达式,其中如果找到某个字符集,它不应该 return 任何匹配项,但如果找不到该字符集,那么它应该 return 找到的匹配项通过正则表达式的其余部分。到目前为止的例子:

re.search('^(?:(?!>).)+$','>Jack Sparrow/Harry>Potter')
>>>  No match found as > present which is what I wanted
re.search('(^(?:(?!>).)+$)(/Harry)','Jack Sparrow/Harry Potter')
>>>  No match found but I was expecting it to return true as > is not there while '/Harry' is

我做错了什么?

如果你想确保字符串不包含 < 而包含 /Harry 你需要匹配整个字符串确保它没有 < 字符。

所以你可以使用

re.fullmatch(r'[^>]*?/Harry[^>]*', text)
re.search(r'^[^>]*?/Harry[^>]*$', text)
re.match(r'[^>]*?/Harry[^>]*$', text)

详情:

  • ^ - 字符串开头
  • [^>]*? - > 以外的任何零个或多个字符尽可能少
  • /Harry - 固定字符串
  • [^>]* - > 以外的零个或多个字符尽可能多
  • $ - 字符串结尾。