【问题标题】:Adding words in regex在正则表达式中添加单词
【发布时间】:2014-11-12 02:26:47
【问题描述】:

我在下面有这个字符串:

"\n  - MyLibrary1 (from ‘repo_name’, branch ‘master’)\n  - AFNetworking (= 1.1.0)\n  - MyLibrary2 (from ‘repo_name’, branch ‘master’)\n  - Objective-C-HMTL-Parser (= 0.0.1)\n\n"

我希望从中提取数据并创建一个如下所示的 JSON:

{
"MyLibrary1": “master”,
"AFNetworking": "1.1.0",
"MyLibrary2": “master”,
"Objective-C-HMTL-Parser": "0.0.1"
}

在我之前的帖子 (Regex for huge string) 的帮助下,我能够获取字符串中 '=' 之后的数据。

我正在修改相同的正则表达式以获得“master”这个词。无论我尝试什么,在我的匹配对象中,第一部分是“MyLibrary1”,第二部分是“来自‘repo_name’,分支‘master’”。

问题: 正则表达式可以包含单词吗?我可以添加单词“branch”以从字符串中删除单词“master”吗?

我试过的正则表达式 - -\s*(.?)\s(\s*(.?)\s)

Rubular 链接 - http://rubular.com/r/gPLIa0xqRC

【问题讨论】:

  • 当然你可以通过修改正则表达式来做到这一点。但是,在此修改之后,表格将几乎被设置,因此没有太多空间可以进行更多添加。在这种情况下,您需要捕获括号内的内容并单独解析。
  • 是的,我实际上在考虑使用 2 个正则表达式,一个用于获取 '=' 之后的值,另一个用于获取 'from' 之后的值。但是下面有 hwnd 的回答,看起来可以使用一个正则表达式来实现。但是,如果我尝试在其中添加更多内容,我的正则表达式肯定会过载并且会开始变得复杂。

标签: regex rubular


【解决方案1】:

是的,您可以在上下文中使用alternation operator 来指定它与等号或除) 之外的任何字符匹配“零次或多次”且前面带有“分支”一词。

-\s*(\S+)\s*\(\s*(?:=|[^)]*\bbranch)\s*(\S+)\s*\)

Rubular

【讨论】:

  • +1 我喜欢这部分[^)]*\bbranch,它从) 向后搜索。
  • @sln 你躲到哪里去了?
  • 一直在做软件发布。
  • 感谢您的回复以及发布正则表达式站点链接。我刚开始使用正则表达式,并希望本周末深入学习它。现在,Rubulal 岩石!你的回复确实让我得到了我需要的东西,除了“主人”这个词有引号。我对其进行了修改以仅获得单词 master 但我仍然得到结尾引号。我在这里做错了吗? Rubular 链接 - rubular.com/r/4xKhief3hX
  • 另外,由于正则表达式变得越来越大和复杂,你认为我应该把它分成两个还是这样更大和复杂的正则表达式是正常的?只是想学习。 :)
【解决方案2】:

我想你想要:

-\s*(.*?)\s*\(\s*.*branch ‘(.*?)’\s*\)

但要小心字面引号,因为它们看起来像自动格式化的引号。您的实际输入可能是 master 周围的单引号 (')。这是rubular 示例。

【讨论】:

  • 感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 2020-04-06
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多