C# 返回C中所有整数的正则表达式;111; 222; 3333“;及;213“;在一个带有alpha的字符串中

C# 返回C中所有整数的正则表达式;111; 222; 3333“;及;213“;在一个带有alpha的字符串中,c#,.net,regex,C#,.net,Regex,我正在提取xml文件中使用的所有数字。这些数字以以下两种模式书写 <Environment Id="11" StringId="8407" DescriptionId="5014" RemoteControlAppStringId="8119; 8118" EnvironmentType="BlueToothBridge" AlternateId="1" XML_NAME_ID="BTBSpeechPlusM" FactoryGainType="LIN18"> <Offse

我正在提取xml文件中使用的所有数字。这些数字以以下两种模式书写

<Environment Id="11" StringId="8407" DescriptionId="5014" RemoteControlAppStringId="8119; 8118" EnvironmentType="BlueToothBridge" AlternateId="1" XML_NAME_ID="BTBSpeechPlusM" FactoryGainType="LIN18">
  <Offsets />
</Environment>

上面的行返回8407115014,但不返回8119和8118,您的正则表达式将无法匹配8119;8118因为你的模式是寻找带引号的数字。 试一试

\b\d+\b

\b指定\d+仅在字边界中匹配。所以LIN18将不匹配。

正如@poke在评论中所说的,这是因为您的正则表达式与字符串不匹配。更改正则表达式以捕获特定的匹配项,并考虑“;”的可能性

下面这样的东西可能会起作用

编辑:
(\b\d+\b)|(\b\d+[;*]\d+\b)


根据您是否可以假定提供的输入是有效的XML,您可以使用以下正则表达式:


Regex.match(myString),(?当然不是。
“8119;8118”
与“引号”不匹配您正在使用的正则表达式。要求是什么?从属性值内部获取任何数字块?或者从文本节点获取任何数字块?您是否应该首先解析XML以获取提取的源代码?不要尝试使用正则表达式解析XML。将数据正确解析为XML并从所需字段中提取值。跳过引号或半c的检查冒号-
“\\b\\d+\\b”
(添加了单词边界检查)-或同时允许-
“[\”;]\\d+[\”;]”
(和空格)顺便说一句,你不需要
1
?看。正则表达式不会在你的图像中给出结果。你没有正确地逃过所有反斜杠。而且正则表达式找不到任何匹配项。@juharr修复了,我从Regex测试仪复制它时出错。我刚刚测试了你的更新,但它与8119或8118不匹配。你呢使用Regex.match或链接的.NET Regex测试仪进行测试?在.NET Regex测试仪中,它实际上可以工作。我在C#中进行了测试,然后在.NET Regex测试仪中进行了测试。两者都失败了。
\b\d+\b
Regex.match(myString, "(?<=\")\\d+(?=\")|(?<=\")\\d+(?=; ?\\d+\")|(?<=\"\\d+; ?)\\d+(?=\")" )