正则表达式仅返回每隔一个匹配

时间:2013-10-31 19:41:41

标签: regex

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

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

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

这是我的样本数据:

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

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

  1. 打印服务器
  2. model =
  3. 1000ZS
  4. 我认为,如果我能找到一种方法告诉正则表达式引擎跳过其他所有事件,我就会拥有它。

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

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

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

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

    有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以随时使用匹配中的报价:

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

从第一个捕获组中提取所需的部分。

如果它明确是以空格开头的引号,那么您可以使用您使用的部分,稍微调整一下:

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

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

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