什么正则表达式将匹配除逗号“,”或分号“;”以外的所有字符?


342

是否可以定义一个正则表达式来匹配除某个已定义字符或一组字符外的所有字符?

基本上,我想用逗号(,)或分号(;)分割字符串。因此,我正在考虑使用正则表达式进行处理,该正则表达式将匹配所有内容,直到遇到逗号或分号为止。

Answers:


470
[^,;]+         

您尚未指定要使用的regex实现。它们中的大多数都具有Split采用分隔符并由分隔符分割的方法。您可能希望将其与“普通”(无^)字符类一起使用:

[,;]+

10
而且该问题没有指定是否允许使用相邻的分隔符,因此尾随的“ +”有点可疑。
乔纳森·莱夫勒

仅针对分号获取错误
Jaswinder

我有一个类似的要求,我想在最后尝试避免使用分号和逗号,但是在我使用const regexDomain = / ^(?:[A-Za-z0-9](?: [A-Za-z0-9-] {0,61} [A-Za-z0-9])\。)+ [A-Za-z0-9] [A-Za-z0-9-] { 0,61} [A-Za-z0-9] / g;好吧,它可以验证我是否使用和;两者之间,但最终失败。
哈里

86

使用字符类。以插入号开头的字符类将匹配该类以外的任何字符。

[^,;]


我有一个类似的要求,我想在最后尝试避免使用分号和逗号,但是在我使用const regexDomain = / ^(?:[A-Za-z0-9](?: [A-Za-z0-9-] {0,61} [A-Za-z0-9])\。)+ [A-Za-z0-9] [A-Za-z0-9-] { 0,61} [A-Za-z0-9] / g;好吧,它可以验证我是否使用和;介于两者之间,但最终无法通过验证。
哈里


2

用这个:

([^,;]*[,;])*

5
这要求用逗号或分号作为字段定界符,而不是字段分隔符。区别在“行”(或其他扫描的记录结构)的末尾很重要;通常,您不想在最后一个字段之后坚持使用逗号或分号。如果您的正则表达式引擎足够强大,则可以使用' (?:([^,;]*)(?:[^,;]|$))'(带非捕获括号的PCRE)。在字段或记录结束后使用逗号或分号的替代方法会使情况更好。还请考虑是否允许使用空字段。
乔纳森·莱夫勒

1
最后,您必须担心捕获实际返回的内容-您是否真的要包含分隔符,并且如果一行上有10个字段,捕获表示法会返回其中的多少个字段。
乔纳森·莱夫勒

1
您对所有事情都是正确的,但我之所以没有回答这些问题,是因为我不知道提问者问的RegEx语言/图书馆是什么。他可能正在使用“ GREP”。无论如何,我感谢您添加这些评论来为他解决问题。:D
NawaMan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.