问题描述
我发现很难完成此正则表达式。
以下正则表达式检查用逗号分隔的字符串的有效性:^(\w+)(,\s*\w+)*$
因此,这将与以下逗号分隔的字符串匹配:
import re
pattern = re.compile(r"^(\w+)(,\s*\w+)*$")
valid_string = "foo,bar,hey,friend,56,7,elephant"
pattern.match(valid_string)
然后,我可以使用^(\W+)(,\s*\W+)*$
对非字符执行相同的操作,该命令将匹配:
import re
pattern = re.compile(r"^(\W+)(,\s*\W+)*$")
valid_string = "%,$,*,$$"
pattern.match(valid_string)
我想创建一个正则表达式,以匹配包含特殊字符,连字符和下划线的字符串,例如
foo-bar,hey_friend,56-8,7_88,elephant$n
我该如何“组合” /w
和/W
来实现这一目标?
编辑: 以下是无效字符串的一些示例:
invalid1 = "aa,b,c d e"
这是无效的,因为它是用空格隔开的,必须用逗号隔开。
这是另一个例子:
invalid2 = "a,c,d"
这是无效的,因为有两个逗号。只能有一个。
解决方法
您可以使用
^[^\s,]+(?:,\s*[^\s,]+)*$
请参见regex demo
详细信息
-
^
-字符串的开头 -
[^\s,]+
-除空格和逗号之外的1个或多个字符 -
(?:,]+)*
-0次或多次出现-
,
-逗号 -
\s*
-0 +空格字符 -
[^\s,]+
-除空格和逗号之外的1个或多个字符
-
-
$
-字符串的结尾。
这是您需要的正则表达式吗?
r"^(\w+[\W_]\w+)(,\s*\w+[\W_]\w+)*$"