我有一个正则表达式字符串:
r'^[A-Za-z0-9А-Яа-яЇїІіЄєҐґ:?!\-\+\(\)\.,ʼ=№#& ]+$'
我想给它添加额外的验证:特殊字符不能一个接一个(例如,不能有“.”、"、!".."等)。但是,特殊字符后面可以跟一个空格(例如,“”、.“?“等)。例外情况是空格后面不能有空格,即一行中不能有2个空格Chatgpt一点用都没有,每次我试图纠正它的answear,它都会生成全新的正则表达式(无效)
blpfk2vs1#
你可以用
^(?!.*[.,!]{2})(?!.* )[A-Za-z0-9А-Яа-яЇїІіЄєҐґ:?!\-+().,ʼ=№#& ]+$
这里我添加了两个负前瞻组:如果字符串(^)的开头后面跟有:
^
.,!
另外,我删除了符号类中多余的转义。
u3r8eeie2#
试图在一个正则表达式中完成所有的验证将导致一个非常复杂的正则表达式,这对未来的维护者来说将是非常难以理解的。
base = re.compile(r'^[A-Za-z0-9А-Яа-яЇїІіЄєҐґ:?!\-\+\(\)\.,ʼ=№#& ]+$') double_special = re.compile(r'[-:?!+()\.,=№#& ]{2}') ... if base.match(some_string) and not double_special.match(some_string): ... string is OK ... else: ... string is not OK ...
上面的double_special正则表达式匹配两个特殊字符 * 或 * 两个空格。
double_special
w3nuxt5m3#
没有理由只需要一个正则表达式。使用两个正则表达式会更简单:一个是您已经拥有的,它检查允许的字符,另一个是检查附加限制。例如,您可以检查一行中包含两个空格或一行中包含两个特殊字符(不包括空格)的字符串,如下所示:
r" {2}|[:?!\-+().,]{2}"
然后,您只需检查以确保字符串匹配第一个正则表达式,并且 doesn't 匹配第二个。
3条答案
按热度按时间blpfk2vs1#
你可以用
这里我添加了两个负前瞻组:如果字符串(
^
)的开头后面跟有:.,!
中的任意一个,你可以根据你的需要来改变)另外,我删除了符号类中多余的转义。
u3r8eeie2#
试图在一个正则表达式中完成所有的验证将导致一个非常复杂的正则表达式,这对未来的维护者来说将是非常难以理解的。
上面的
double_special
正则表达式匹配两个特殊字符 * 或 * 两个空格。w3nuxt5m3#
没有理由只需要一个正则表达式。使用两个正则表达式会更简单:一个是您已经拥有的,它检查允许的字符,另一个是检查附加限制。
例如,您可以检查一行中包含两个空格或一行中包含两个特殊字符(不包括空格)的字符串,如下所示:
然后,您只需检查以确保字符串匹配第一个正则表达式,并且 doesn't 匹配第二个。