我有一个正则表达式,允许字符串是独立的,用连字符和下划线分隔。
我需要帮助,所以字符串只使用连字符或下划线,但不能同时使用。
这是我到目前为止所做的。
^([a-z][a-z0-9]*)([-_]{1}[a-z0-9]+)*$
foo = passed
foo-bar = passed
foo_bar = passed
foo-bar-baz = passed
foo_bar_baz = passed
foo-bar_baz_qux = passed # but I don't want it to
foo_bar-baz-quz = passed # but I don't want it to
答案 0 :(得分:4)
您可以稍微扩展模式并使用反向引用仅匹配相同的分隔符:
l = [ dict(zip(['Long', 'Lat'],c['Shape'][1:-1].split(',') if len(c['Shape'])>0 else ['',''] )) for c in d]
请参阅regex demo
<强>详情:
^[a-z][a-z0-9]*(?:([-_])[a-z0-9]+(?:\1[a-z0-9]+)*)?$
- 字符串开头^
- 后跟0 +小写字母或数字的字母[a-z][a-z0-9]*
- 可选序列:
(?:([-_])[a-z0-9]+(?:\1[a-z0-9]+)*)?
- 捕获与([-_])
或-
_
- 1个小写字母或数字[a-z0-9]+
- 0+序列:
(?:\1[a-z0-9]+)*
- 与第1组相同的值\1
- 一个或多个小写字母或数字[a-z0-9]+
- 字符串结束。答案 1 :(得分:3)
这是一个很好的清洁解决方案:
^([a-zA-Z-]+|[a-zA-Z_]+)$
分解!
^
从文字开头[a-zA-Z-]+
匹配任何a-z
或A-Z
或-
|
或运营商[a-zA-Z_]+
匹配任何a-z
或A-Z
或_
$
在文字末尾结束