C# 从括号之间提取数字
我有一个正则表达式,用于从两个括号之间提取一个数字。在我们使输入字符串可自定义之前,它一直工作得很好。现在,如果在字符串的其他地方找到一个数字,则取最后一个数字。我的表达如下:C# 从括号之间提取数字,c#,regex,C#,Regex,我有一个正则表达式,用于从两个括号之间提取一个数字。在我们使输入字符串可自定义之前,它一直工作得很好。现在,如果在字符串的其他地方找到一个数字,则取最后一个数字。我的表达如下: int icorrespid = Convert.ToInt32(Regex.Match(subject, @"(\d+)(?!.#\d)", RegexOptions.RightToLeft).Value); 如果我发送字符串,这(12)是一个测试,它可以很好地工作,提取12。但是,如果我发送这(12)是一个test
int icorrespid = Convert.ToInt32(Regex.Match(subject, @"(\d+)(?!.#\d)", RegexOptions.RightToLeft).Value);
如果我发送字符串,这(12)是一个测试,它可以很好地工作,提取12。但是,如果我发送这(12)是一个test2
,结果是2。我意识到我可以将RightToLeft更改为LeftToRight,这将修复此实例,但我只想获取括号之间的数字
我相信这对任何有正则表达式经验的人来说都很容易(显然不是我)。我希望你能告诉我如何纠正这一点,以得到我想要的,但也给我一个简短的解释,我做错了什么,这样我就有希望改善
多谢各位
其他信息
我感谢所有的答复。我采纳了大家一致同意的建议,并尝试了以下每种格式:
int icorrespid = Convert.ToInt32(Regex.Match(subject, @"(\(\d+\))(?!.#\d)", RegexOptions.RightToLeft).Value);
int icorrespid = Convert.ToInt32(Regex.Match(subject, @"(\(\d+\))", RegexOptions.RightToLeft).Value);
int icorrespid = Convert.ToInt32(Regex.Match(subject, @"\(\d+\)", RegexOptions.RightToLeft).Value);
不幸的是,对于每一个,我都会得到一个异常,说明输入字符串的格式不正确。我以前没听过。我确信我可以在一两分钟内解决这个问题,而不用使用正则表达式,但我的固执已经开始了
谢谢大家的评论。您需要在正则表达式中转义括号,因为它们意味着什么
@"(\(\d+\))(?!.#\d)
或者,如果你真的不想让你的号码在一个群体中被发现
@"\(\d+\)(?!.#\d)
您需要在正则表达式中转义括号,因为它们有某种含义
@"(\(\d+\))(?!.#\d)
或者,如果你真的不想让你的号码在一个群体中被发现
@"\(\d+\)(?!.#\d)
请尝试以下正则表达式:
\(#(\d+)\)
括号是转义的\(
和\)
,括号内是对数字的正常搜索
如果您使用.Value
属性,它将给出用括号括起来的数字。相反,您需要使用组
集合。因此,要在代码中使用,可以这样做:(现在添加了错误检查!)
请尝试以下正则表达式:
\(#(\d+)\)
括号是转义的\(
和\)
,括号内是对数字的正常搜索
如果您使用.Value
属性,它将给出用括号括起来的数字。相反,您需要使用组
集合。因此,要在代码中使用,可以这样做:(现在添加了错误检查!)
使用:
(
和)
是被称为捕获组的保留字符。使用:
(
和)
是被称为捕获组的保留字符。括号在正则表达式中有其含义,因此需要对其进行转义:
\(\d+\)
实际含义是创建一个捕获组,因此如果您在代码中依赖于捕获组,则需要另一对括号,如下所示:
\((\d+)\)
我不太清楚(?!。#\d)
部分的目的是什么,但是如果您确实需要它,您可以将它放在原处(只需将它附加到上述任一版本的末尾)括号在regex中有意义,因此您需要对其进行转义:
\(\d+\)
实际含义是创建一个捕获组,因此如果您在代码中依赖于捕获组,则需要另一对括号,如下所示:
\((\d+)\)
我不太清楚(?!。#\d)
部分的目的是什么,但是如果您确实需要它,您可以将它放在原处(只需将它附加到上述任一版本的末尾)您可以通过在捕获中包含转义括号来捕获括号,然后将其解析出来;那就行了。那12.1
或-5
呢?你对它们感兴趣还是只对正整数感兴趣?@DavidG:我只对正整数感兴趣,但你是对的;我应该指定的。@Tim我已经更新了我的答案,以显示您的错误所在。另一个使用“环顾”的解决方案:@(?您可以通过在捕获中包含转义括号来捕获括号,然后将其解析出来;这样做就可以了。12.1
或-5
?您对它们感兴趣还是只对正整数感兴趣?@DavidG:我只对正整数感兴趣,但您是对的;我应该指定它。@Tim我找到了在我的答案上注明日期以显示错误所在。另一个使用“环顾”的解决方案:@(?我复制并粘贴了您所做的语句,但仍然得到关于输入字符串格式不正确的错误。我假设它是关于RegEx语句,而不是主题字符串。我刚刚复制并粘贴了它,它工作正常。subject
的内容是什么?如果subject
为空,它将为您提供出现错误。那么我们也需要查找
符号吗?好的,修复了它以检查
。我复制并粘贴了您所做的语句,但仍然得到关于输入字符串格式不正确的错误。我假设它是关于RegEx语句,而不是主题字符串。我刚刚复制并粘贴了它,并且它可以工作。主题
的内容是什么?如果主题
为空,它会给你这个错误。那么我们也需要查找
符号吗?好的,修复它以检查
。