Python正则表达式:连续不超过一个特殊符号

时间:2014-09-17 11:45:54

标签: python regex

我正在寻找一种方法来获得连续[a-z]中不超过1个特殊符号的子串。 这是一个例子:

sp_sym = '/,@ '
text1 = 'as for@you' # <- ok
text2 = 'as for@ you ' # <- ok
text3 = 'as for@@you ' # <- not good

[a-z(?:/,@){1}]这样的表达式无效。

3 个答案:

答案 0 :(得分:1)

尝试匹配字符后跟任何不是字符之一的字符:[/,@][^/,@]

括号是与它们之间的任何字符匹配的集合,因此[/,@]匹配/或,或@。但是当括号中的第一个字符是^时,这会取消该集合,因此它匹配除集合中的字符之外的所有字符。

编辑:当然你必须确保在模式之前没有这些字符之一。那么它变成:[^/,@][/,@][^/,@]。现在唯一的问题可能是你无法匹配字符串开头或结尾的单个特殊字符。你需要匹配那些吗?

答案 1 :(得分:1)

为什么不搜索那些的字符串,而不是搜索 not 的字符串,而不是 ?然后,您的结果是所有其他字符串。

result = []
for string in (text1, text2, text3):
    if not re.search(r'[/,@]{2,}', string):
        result.append(string)

如果你喜欢单行:

result = [s for s in (text1,text2,text3) if not re.search(r'[/,@]{2,}', s)]

答案 2 :(得分:1)

如果字符串在小写字母内有连续的/,@符号,则以下正则表达不会匹配字符串

^(?:(?!([,\/@])\1+)[a-z\W])+$

DEMO