1

我正在尝试编写一个匹配人类可读引用值的正则表达式。例如,XML 属性。我遇到的问题是,如果您考虑属性的结束引号和后续属性的开始引号,则引用区域之间的数据实际上也被引用。这是我到目前为止的表达:

(?<=\")(?(?!\s+\")[^\"]+)(?=\")

我试图用简单的英语表达的是:一个引号(不要捕获它),如果后面没有只是以另一个引号结尾的空格,则匹配任何不是一个引号后跟另一个引号(不捕获最后一个引号)的内容。

这是我的示例数据:

<computer name = "printserver" model = "1000ZS" />

正则表达式产生 3 个匹配项:

  1. 打印服务器
  2. 型号 =
  3. 1000ZS

我认为,如果我能找到一种方法来告诉正则表达式引擎跳过所有其他事件,我就会拥有它。

这是另一个示例数据集,有点像 QML 类属性:

field1: "value1" field2: "value2" field3: "value3"

我可以“看到”引用的数据,但是通过正则表达式提取它正在击败我:-)

我在我的项目中使用 .NET 4.5 System.Text.RegularExpressions 框架。我不是针对特定的标记,如 XML、JSON、QML 等,而是在寻找一个通用的正则表达式,它只会抓取引用的值,类似于我们将数据解释为人类的方式......

有什么建议么?谢谢!

4

1 回答 1

2

您始终可以在比赛中使用报价:

\"([^\"]+)\"

并从第一个捕获组中提取您需要的部分。

如果它是一个明确的引号,前面有一个空格,那么你可以使用你使用的部分,稍微调整一下:

\"((?:(?!\s+\")[^\"])+)\"

如果你只知道字符串包含这样的简单模式,也许是这样的:

(?:(?!\s+\")[^\"])+(?=\")
于 2013-10-31T19:50:12.487 回答