【问题标题】:Repeated regular expression重复的正则表达式
【发布时间】:2010-05-11 21:15:59
【问题描述】:

我怎样才能解析这样的字符串:

name1="val1"    name2="val2"    name3="val3"

我不能使用split(\s+),因为它可以是name = "val 1"。 我正在做java,但任何语言都可以。

【问题讨论】:

  • 用什么语言?从你目前的情况来看,我猜是 Perl?

标签: java regex string


【解决方案1】:

在 Java 中,正则表达式略有不同,通过捕获组将名称/值对放入 Map<String,String>

Matcher.find()while 循环中的这种用法很典型。

    import java.util.*;
    import java.util.regex.*;
    //...

    String pattern = "(\\w+)\\s*=\\s*\"([^\"]*+)\"";

    String text = "name1 = \"val 1\"    name2=\"val2\"    name3=\"val3\"";
    System.out.println(text);
    // name1 = "val 1"    name2="val2"    name3="val3"

    Matcher m = Pattern.compile(pattern).matcher(text);
    Map<String,String> map = new HashMap<String,String>();
    while (m.find()) {
        map.put(m.group(1), m.group(2));
    }
    System.out.println(map);
    // {name3=val3, name1=val 1, name2=val2}

API 链接

regular-expressions.info 链接

【讨论】:

  • 好答案。我会将HashMap 更改为LinkedHashMap。所以它将以相同的顺序打印。
【解决方案2】:

在 Python 中:

import re
astr='''name1="val 1 "    name2 = "val2"    name3="val3"'''
print(re.findall('\w+\s*=\s*".*?"',astr))
# ['name1="val 1 "', 'name2 = "val2"', 'name3="val3"']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    相关资源
    最近更新 更多