Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从括号之间提取数字_C#_Regex - Fatal编程技术网

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语句,而不是主题字符串。我刚刚复制并粘贴了它,并且它可以工作。
主题
的内容是什么?如果
主题
为空,它会给你这个错误。那么我们也需要查找
符号吗?好的,修复它以检查