我知道这些东西已被讨论过很多,但我在尝试匹配以下内容时遇到了问题......
示例输入:“test test 310-315”
我需要一个正则表达式来识别一个数字后跟一个破折号,并返回310.但是如何在破折号表达式中包含破折号。所以最终的匹配结果是:“310”。
非常感谢 - kcross
编辑:另外,我怎么做同样的事情,但前面的破折号,但也考虑到破折号后面的数字可能是负数...没想到这个我立刻写了这个问题。例如:“test test 310--315”返回-315,“test 310-315”返回315。
答案 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 =匹配任何十进制数字 * =根据需要匹配前一次 (?= \ - )=展望破折号
编辑格式化问题,发布后未显示斜杠