如何用正则expression式匹配连字符?

如何重写[a-zA-Z0-9!$* \t\r\n]模式以匹配连字符和现有字符?

逃避连字符。

 [a-zA-Z0-9!$* \t\r\n\-] 

更新
没关系这个答案 – 你可以添加连字符组,但你不必逃避它。 请参阅康拉德·鲁道夫的回答,而不是回答更好的工作,并解释原因。

连字符通常是正则expression式中的正常字符。 只有在字符类其他两个字符之间,它才有特殊的含义。

从而:

  • [-]匹配连字符。
  • [abc-]匹配abc或连字符。
  • [-abc]匹配abc或连字符。
  • [ab-d]匹配abcd这里只有连字符表示一个字符范围)。

总是使用一个转义的连字符不那么容易混淆,所以它不必依赖于位置。 这是一个\-括号内的字符类。

但还有其他的东西需要考虑。 这些列举的字符中的一些应该可能以不同的方式写入。 在某些情况下,他们肯定应该。

这种正则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式允许连字符。