正则表达式在同时匹配另一个组时否定一个字符组
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
- 固定字符串
[^>]*
- >
以外的零个或多个字符尽可能多
$
- 字符串结尾。
我正在尝试创建一个正则表达式,其中如果找到某个字符集,它不应该 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
- 固定字符串[^>]*
->
以外的零个或多个字符尽可能多$
- 字符串结尾。