正则表达式匹配不重复符号的字符串

Regex match string where symbol is not repeated

我有这样的字符串:

group items % together into% 错误

characters % that can match any single

如何匹配符号 % 不重复的句子?

我试过这样的模式,但它找到了第一个带有符号 %

的匹配句子

[%]{1}

数一数 (Python):

>>> s = 'blah % blah %'
>>> s.count('%') == 1
False
>>> s = 'blah % blah'
>>> s.count('%') == 1
True

使用正则表达式:

>>> re.match('[^%]*%[^%]*$','gfdg%fdgfgfd%')
>>> re.match('[^%]*%[^%]*$','blah % blah % blah')
>>> re.match('[^%]*%[^%]*$','blah % blah blah')
<re.Match object; span=(0, 16), match='blah % blah blah'>

re.match必须从字符串开头匹配,如果使用re.search,则使用^(匹配字符串开头),可以在字符串中间匹配。

>>> re.search('^[^%]*%[^%]*$','gfdg%fdgfgfd%')
>>> re.search('^[^%]*%[^%]*$','gfdg%fdgfgfd')
<re.Match object; span=(0, 12), match='gfdg%fdgfgfd'>

您可以按如下方式使用 re.search

items = ['group items % together into%', 'characters % that can match any single']
for item in items:
    output = item
    if re.search(r'^.*%.*%.*$', item):
        output = output + ' FALSE'
    else:
        output = output + ' TRUE'
    print(output)

这会打印:

group items % together into% FALSE
characters % that can match any single TRUE

您可以在 python 中使用此正则表达式以 return 失败,因为其中包含多个 % 的行:

^(?!([^%]*%){2}).+

RegEx Demo

(?!([^%]*%){2}) 是一个否定前瞻,如果在行开始后发现两次 %,则匹配失败。

我假设您问题中的“句子”与输入文本中的一行相同。有了这个假设,您可以使用以下内容:

^[^%\r\n]*(%[^%\r\n]*)?$

这将与多行标志和全局标志一起匹配输入字符串中包含 0 或 1 个“%”符号的所有行。

^ 匹配一行的开头
[^%\r\n]* 匹配 0 个或多个不是“%”或新行的字符
(...)? 匹配括号中内容的 0 或 1 个实例
% 按字面意思匹配“%”
$ 匹配行尾