1

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

示例输入:“测试测试 310-315”

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

非常感谢 - kcross

编辑:另外,除了前面的破折号,我将如何做同样的事情,还要考虑到破折号后面的数字可能是负数......当我立即写下这个问题时,我没有想到这个。例如:“test test 310--315”返回 -315,“test 310-315”返回 315。

4

5 回答 5

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

\d+- 寻找一位或多位数字

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

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

此外,您可能想要这个:

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

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


作为对您的评论的回应,这里有一个正则表达式,它将检查 a 之后的数字-,同时考虑潜在的负 (-) 数字:

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

(?<=\-)- 否定的lookbehind,它将检查并确保前面有-

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

\d+- 一位或多位数字

于 2012-09-12T18:13:14.073 回答
1

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

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

看到它在这里工作。只是为了描述,没有什么复杂的,只是-?用来匹配一个可选的-\d+匹配一个或多个数字。文字-匹配本身。

于 2012-09-12T18:00:22.067 回答
0

这是我使用的一些文档:

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

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

确保您逃脱了您的转义字符\

于 2012-09-12T17:59:44.437 回答
0

您可以-使用backslash (\). 由于反斜杠在 C# 文字中具有特殊含义,可以转义引号或成为某些字符的一部分,因此您需要使用另一个backslash(\). 所以本质上是这样\d+\\-

于 2012-09-12T18:00:11.623 回答
0

\b\d*(?=\-) 你会想要向前看破折号

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

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

于 2012-09-12T18:05:40.457 回答