我知道这件事已经被谈论了很多,但我有一个问题试图匹配以下。
输入示例:“测试测试310-315”
我需要一个regex表达式,它可以识别后面跟一个破折号的数字,并返回310。我如何在正则表达式中包含破折号。那么最终的匹配结果就是:“310”
非常感谢- kcross
编辑:还有,我怎么做同样的事情,但前面有破折号,* 但 * 也考虑到破折号后面的数字可能是负数......当我马上写问题的时候,我没有想到这一点。例如:“test test 310--315”返回-315,“test 310-315”返回315。
5条答案
按热度按时间vsnjm48y1#
\d+
-查找一个或多个数字(?=\-)
-确保后跟破折号@
只是消除了转义反斜杠以保持编译器满意的需要。此外,您可能需要以下内容:
这将检查一个或多个数字,后跟一个破折号,后跟一个或多个数字,但只匹配第一个集合。
作为对您评论的回应,这里有一个正则表达式,它将检查
-
后面的数字,同时考虑潜在的负数(-):(?<=\-)
-负向后看,将检查并确保存在前一个-
\-?
-检查零个破折号或一个破折号\d+
-一个或多个数字pb3s4cty2#
(?'number'\d+)-
会工作,不需要逃逸。在本例中,包含单个数字的组是命名组'number'
。如果要使用可选符号匹配两个组,请尝试:简单描述一下,没有什么复杂的,只是使用
-?
匹配一个可选的-
和\d+
匹配一个或多个数字。文字-
匹配自身。9o685dep3#
下面是我使用一些文档:
http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet
在该页面的评论部分,它建议使用
'\-'
转义破折号确保转义转义字符
\
nc1teljy4#
您可以使用
backslash (\)
来转义-
在regex中的特殊含义(表示范围)。由于反斜杠在C#文字中有特殊的含义,可以转义引号或成为某些字符的一部分,所以你需要用另一个backslash(\)
转义。所以本质上它是\d+\\-
。tkclm6bt5#
\b\d*(?=\-)
你会想要向前看的破折号\B =从单词边界开始\d =匹配任何十进制数字 * =根据需要匹配前一个数字(?=-)=向前看破折号
因格式问题编辑,发布后未显示斜线