正则表达式巨大的字符串

时间:2014-09-16 18:44:16

标签: ruby regex rubular

我有以下字符串:

"\n  - MyLibrary1 (= 0.10.0)\n  - AFNetworking (= 1.1.0)\n  - MyLibrary2 (= 3.0.0)\n  - Objective-C-HMTL-Parser (= 0.0.1)\n\n"

我想创建一个像这样的JSON:

{
"MyLibrary1": "0.10.0",
"AFNetworking": "1.1.0",
"MyLibrary2": "3.0.0",
"Objective-C-HMTL-Parser": "0.0.1"
}

我需要分开" MyLibrary1"和" 0.10.0"以及类似的其他数据来创建一个字符串。我正在使用正则表达式来从字符串中分离数据。

我尝试/-(.*)//=(.*)/,但这会在-=之后返回所有内容。

有没有办法使用单一正则表达式获取所需的数据?另外,我如何让正则表达式知道它需要在()停止。我正在使用Rubular对此进行测试,每当我输入()时,我都会得到"您有一个不匹配的括号。"

3 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式。

-\s*(\S+)\s*\(\s*=\s*(\S+)\s*\)

您的主要匹配结果将位于捕获论坛#1中,而值匹配结果将位于论坛#2

Rubular

答案 1 :(得分:1)

似乎可以使用您的样本。

 # -\s*(.*?)\s*\(\s*=\s*(.*?)\s*\)

 -
 \s* 
 ( .*? )        # (1)
 \s* 
 \(
 \s* 
 =
 \s* 
 ( .*? )        # (2)
 \s* 
 \)

或者,您可以进行一些温和的验证。请注意,惰性量词仅用于 修剪空白。

 # -\s*([^()=]*?)\s*\(\s*=\s*([^()=-]*?)\s*\)

 -
 \s* 
 ( [^()=]*? )  # (1)
 \s* 
 \(
 \s* 
 =
 \s* 
 ( [^()=-]*? )  # (2)
 \s* 
 \)

答案 2 :(得分:0)

-\s{1}([A-Za-z0-9]+)\s+\(=\s+([0-9\.]+)\)

将返回匹配项:

$ 1 AFNetworking $ 2 1.1.0

等...

Rubular