正则表达式匹配不重复符号的字符串
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}).+
(?!([^%]*%){2})
是一个否定前瞻,如果在行开始后发现两次 %
,则匹配失败。
我假设您问题中的“句子”与输入文本中的一行相同。有了这个假设,您可以使用以下内容:
^[^%\r\n]*(%[^%\r\n]*)?$
这将与多行标志和全局标志一起匹配输入字符串中包含 0 或 1 个“%”符号的所有行。
^
匹配一行的开头
[^%\r\n]*
匹配 0 个或多个不是“%”或新行的字符
(...)?
匹配括号中内容的 0 或 1 个实例
%
按字面意思匹配“%”
$
匹配行尾
我有这样的字符串:
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}).+
(?!([^%]*%){2})
是一个否定前瞻,如果在行开始后发现两次 %
,则匹配失败。
我假设您问题中的“句子”与输入文本中的一行相同。有了这个假设,您可以使用以下内容:
^[^%\r\n]*(%[^%\r\n]*)?$
这将与多行标志和全局标志一起匹配输入字符串中包含 0 或 1 个“%”符号的所有行。
^
匹配一行的开头
[^%\r\n]*
匹配 0 个或多个不是“%”或新行的字符
(...)?
匹配括号中内容的 0 或 1 个实例
%
按字面意思匹配“%”
$
匹配行尾