用于匹配除给定字符串之外的所有字符串的Python正则表达式

时间:2013-12-28 19:36:59

标签: python regex

我想要一个正则表达式,它将匹配长度大于0(.+)的所有字符串,但不匹配字符串:"%",即包含%的长度为1的字符串。< / p>

2 个答案:

答案 0 :(得分:5)

测试单字符'%'字符串会更加 更便宜:

if inputstring and inputstring != '%':

不需要正则表达式。上面的表达式测试字符串是否包含至少一个字符,并且不完全等于'%'

如果必须使用正则表达式,则匹配长度为1的负字符集.,长度为2及以上:

r'^(?:[^%]|.{2,})$'

如果不是 %,则匹配1个字符;如果字符串长度为2或更长,则匹配任何字符。

演示:

>>> import re
>>> no_percentage = re.compile(r'^(?:[^%]|.{2,})$')
>>> no_percentage.search('')
>>> no_percentage.search('%')
>>> no_percentage.search('%1')
<_sre.SRE_Match object at 0x10f374370>
>>> no_percentage.search('1')
<_sre.SRE_Match object at 0x10f3743d8>

答案 1 :(得分:4)

这个正则表达式适用于你r'^([^%] |。{2,}} $'
正则表达式的解释

  • ^ - 强制表达式从头开始匹配
  • ([^%] |。{2,}) - [^%]部分匹配不等于'%'的单个字符和部分。{2,}表示长度为2或更长的字符串由任何字符组成。 '|' sign强制该字符串是两者之一。
  • $ - 强制表达式匹配到最后一个元素

但是再次如上所述,平等检查应该更好更清洁。