如何用正则expression式匹配连字符?
如何重写[a-zA-Z0-9!$* \t\r\n]
模式以匹配连字符和现有字符?
逃避连字符。
[a-zA-Z0-9!$* \t\r\n\-]
更新 :
没关系这个答案 – 你可以添加连字符组,但你不必逃避它。 请参阅康拉德·鲁道夫的回答,而不是回答更好的工作,并解释原因。
连字符通常是正则expression式中的正常字符。 只有在字符类和其他两个字符之间,它才有特殊的含义。
从而:
-
[-]
匹配连字符。 -
[abc-]
匹配a
,b
,c
或连字符。 -
[-abc]
匹配a
,b
,c
或连字符。 -
[ab-d]
匹配a
,b
,c
或d
( 这里只有连字符表示一个字符范围)。
总是使用一个转义的连字符不那么容易混淆,所以它不必依赖于位置。 这是一个\-
括号内的字符类。
但还有其他的东西需要考虑。 这些列举的字符中的一些应该可能以不同的方式写入。 在某些情况下,他们肯定应该。
这种正则expression式的比较说C可以使用一些简单的Unicode属性。 如果你正在处理Unicode,那么你应该对所有可能的字母使用普通类\p{L}
,对于十进制数可能使用 \p{Nd}
。 另外,如果你想要容纳所有的标点符号,不只是HYPHEN-MINUS,你应该使用\p{Pd}
属性。 你可能也想把这个空白字符序列写成\s
,假设对你来说不是太普通。
所有这一切,都可以在[\p{L}\p{Nd}\p{Pd}!$*]
中匹配任何一个字符。
无论如何,即使我没有打算处理完整的Unicode集合,我也可能会这样做,因为这是一个很好的习惯,因为这些东西往往超出了原来的参数。 现在,当您将其用于其他代码时,它仍然可以正常工作。 如果你硬编码所有的字符,它不会。
这是你以后?
MatchCollection matches = Regex.Matches(mystring, "-");
使用不带引号的“\ p {Pd}”来匹配任何types的连字符。 “ – ”字符只是一种连字符,在正则expression式中也恰好是一个特殊字符。
[-a-z0-9] +,[a-z0-9 – ] +,[az-0-9] +和[az-0-9] +都是相同的。 symbol.And也[a-z0-9 – +()] +这个正则expression式允许连字符。