我正在提取xml文件中使用的所有数字。这些数字用以下两种模式写成
<Environment Id="11" StringId="8407" DescriptionId="5014" RemoteControlAppStringId="8119; 8118" EnvironmentType="BlueToothBridge" AlternateId="1" XML_NAME_ID="BTBSpeechPlusM" FactoryGainType="LIN18">
<Offsets />
</Environment>
我正在使用正则表达式:“\”\ d *; \“”和“\”\ d * \“”来提取所有数字。 从上面我使用
运行正则表达式“\”\ d * \“”Regex.Match(myString, "\"\\d*\"")
以上行返回8407,11,5014,但未返回8119和8118
答案 0 :(得分:3)
你的正则表达式将无法匹配8119; 8118因为您的模式正在查找带引号的数字。 试试
\b\d+\b
\ b指定\ d +仅匹配单词边界。所以LIN 18 将不匹配。
答案 1 :(得分:1)
取决于您是否可以假设提供的输入是有效的XML,您可以使用以下正则表达式:1
Regex.match(myString, "(?<=\")\\d+(?=\")|(?<=\")\\d+(?=; ?\\d+\")|(?<=\"\\d+; ?)\\d+(?=\")" )
这背后的主要思想是考虑到三种可能的情况:
我在正则表达式中包含两个新概念:2
这些概念允许正则表达式检查特定内容是否在其之前或之后,而不是将其放入匹配中。
这个正则表达式可以很容易地进行优化,但这是一个基本方法的例子。
开发这样的正则表达式的一个好方法是使用工具(在线或离线)来测试正则表达式。我使用的工具是.NET Regex Tester。
答案 2 :(得分:0)