C#正则表达式匹配特殊字符

时间:2012-09-12 17:57:42

标签: c# regex

我知道这些东西已被讨论过很多,但我在尝试匹配以下内容时遇到了问题......

示例输入:“test test 310-315”

我需要一个正则表达式来识别一个数字后跟一个破折号,并返回310.但是如何在破折号表达式中包含破折号。所以最终的匹配结果是:“310”。

非常感谢 - kcross

编辑:另外,我怎么做同样的事情,但前面的破折号,也考虑到破折号后面的数字可能是负数...没想到这个我立刻写了这个问题。例如:“test test 310--315”返回-315,“test 310-315”返回315。

5 个答案:

答案 0 :(得分:3)

Regex regex = new Regex(@"\d+(?=\-)");

\d+ - 查找一个或多个数字

(?=\-) - 确保后面跟一个破折号

@只是消除了转义反斜杠以保持编译器满意的需要。

此外,您可能需要这样:

\d+(?=\-\d+)

这将检查一个或多个数字,后跟一个破折号,后跟一个或多个数字,但只匹配第一个数字。


在回复您的评论时,这里有一个正则表达式,用于检查-之后的数字,同时考虑潜在的负数( - )数字:

Regex regex = new Regex(@"(?<=\-)\-?\d+");

(?<=\-) - 负面观察,会检查并确保前面有-

\-? - 检查零或一个破折号

\d+ - 一个或多个数字

答案 1 :(得分:1)

(?'number'\d+)-将起作用(无需逃避)。在此示例中,包含单个数字的组是命名组'number'。 如果您想要使用可选符号匹配两个组,请尝试:

@"(?'first'-?\d+)-(?'second'-?\d+)"

See it working here。 只是为了描述,没有什么复杂的,只需使用-?匹配可选的-\d+来匹配一个或多个数字。文字-匹配本身。

答案 2 :(得分:0)

这是我使用的一些文档:

http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

在该页面的评论部分,建议使用'\-'

转义短划线

确保您逃脱转义字符\

答案 3 :(得分:0)

您可以使用-以正则表达式语言(均值范围)转义backslash (\)的特殊含义。由于反斜杠在C#文字中具有特殊含义以转义引号或成为某些字符的一部分,因此您需要使用另一个backslash(\)来转义它。所以基本上它是\d+\\-

答案 4 :(得分:0)

\b\d*(?=\-)您需要提前看看破折号

\ b =从单词边界开始 \ d =匹配任何十进制数字 * =根据需要匹配前一次 (?= \ - )=展望破折号

编辑格式化问题,发布后未显示斜杠