如何编写正则匹配含'-'且存在其他单词字符的字符串
正则匹配需求
- 已有可用正则
r"^[-]+$",作用是匹配完全由-构成的字符串,例如----、---、--------这类纯横杠内容。 - 待实现的新匹配规则:匹配同时满足以下两个条件的条目:
- 字符串内包含
-字符 - 字符串内同时存在其他单词字符(即匹配
\w规则的字母、数字、下划线)
- 字符串内包含
符合规则的参考示例:
---vsgvrf-sgwfwrgfs---、-----hwvchwbfk、bfcbewubf------、-efefe-ege-、-gdiwen
之前写法的问题
之前尝试的两个正则:
r"(\w[^-])+-+(\w[^-])*"r"\w[^-]+-+\w[^-]+|-+\w[^-]+|\w[^-]+-+"
漏匹配的核心原因是写法强制要求\w后面必须紧跟非-字符,无法覆盖单个单词字符紧邻-、-在字符串首尾的部分场景。
正确正则方案
使用正向先行断言同时校验两个必填条件即可,正则模式如下:
r"^(?=.*-)(?=.*\w).+$"
如果业务场景里单词字符不需要包含下划线,把\w替换为[a-zA-Z0-9]即可。
匹配逻辑说明
^标记字符串起始位置(?=.*-)校验:字符串任意位置至少存在1个-(?=.*\w)校验:字符串任意位置至少存在1个单词字符,自动排除纯-的不符合条目.+$匹配整个字符串到结束位置
这个写法没有字符顺序限制,不管-和单词字符怎么排布,只要同时存在两类字符就会命中,不会出现漏匹配。
内容的提问来源于stack exchange,提问作者kateryna_sm
相关产品推荐
相关产品推荐

