选择不包括某些特定单词的单词-正则表达式

我正在尝试匹配句子中不包含以@开头的单词。

不排除以@开头的单词的原始模式如下:

>>> import re
>>> token_pattern_o='(?u)\\b\\w\\w+\\b'
>>> re.search(token_pattern_o,"@mutt")
<re.Match object; span=(1,5),match='mutt'>

现在,我只是为排除项添加了负面的预测:

>>> token_pattern = '(?u)\\b^(?!@)\\w\\w+\\b'
>>> re.search(token_pattern,"#mutt")
>>> re.search(token_pattern,"@mutt")
>>> re.search(token_pattern,"mutt")
<re.Match object; span=(0,4),match='mutt'>
>>> re.search(token_pattern,"_mutt")
<re.Match object; span=(0,match='_mutt'>

问题是,它排除了以任何特殊字符开头的每个单词。

有没有办法实现我想要达到的目标?

shabisb1006810086 回答:选择不包括某些特定单词的单词-正则表达式

我相信您正在寻找以下内容:

token_pattern = '(?u)\\b(?<!@)\\w\\w+\\b'

话虽如此,请帮我一个忙:

token_pattern = r'(?u)\b(?<!@)\w\w+\b'
,

您要删除字符还是排除整个单词?

import re

patt = re.compile(r'[^@]\w*')

print(patt.search('mutt'))
print(patt.search('#mutt'))
print(patt.search('@mutt'))
print(patt.search('%mutt'))
print(patt.search('^mutt'))

将给出以下输出:

<re.Match object; span=(0,4),match='mutt'>
<re.Match object; span=(0,5),match='#mutt'>
<re.Match object; span=(1,match='%mutt'>
<re.Match object; span=(0,match='^mutt'>

将模式更改为:

patt = re.compile(r'[^@]?\w*')

将提供以下输出:

<re.Match object; span=(0,match='#mutt'>
<re.Match object; span=(0,0),match=''>
<re.Match object; span=(0,match='^mutt'>
,

另一种选择是匹配单个单词字符,并断言左侧不是function baannng_floating_publish() { echo '<style> #poststuff #post-body.columns-2 #side-sortables { margin-top: 330px; } #submitdiv { position: fixed; margin-top: -330px; right: 20px; z-index: 9999; max-width: 278px; width: 100%; -webkit-box-shadow: 0px 0px 15px 0px rgba(0,0.3); -moz-box-shadow: 0px 0px 15px 0px rgba(0,0.3); box-shadow: 0px 0px 15px 0px rgba(0,0.3););} </style>'; } add_action('admin_head','baannng_floating_publish');

如果是这种情况,请匹配1个以上的字符,并在模式的开头和结尾使用单词边界。

@

部分

  • (?u)\b\w(?<!@\w)\w+\b Unicode的内联标志(或使用(?u)
  • re.U字边界
  • \b匹配单词char
  • \w后面是负数,则断言直接在左边的不是
    • (?<!匹配@和一个单词char
  • @\w近距离浏览
  • )匹配1个以上的字符字符
  • \w+字边界

Regex demo

本文链接:https://www.f2er.com/2880369.html

大家都在问