【问题标题】:Using regex to split (limited experience w/ regex)使用正则表达式进行拆分(使用正则表达式的经验有限)
【发布时间】:2013-02-01 05:16:09
【问题描述】:

我对正则表达式的经验和知识有限。我需要做的是将一个字符串拆分为多个子字符串。

有问题的字符串是

String str =
   "Brayden Schenn, C GAMES PLAYED: 13, GOALS: 3, ASSISTS: 6," +
   " POINTS: 9, PLUS/MINUS: 5, PIM: 7";

我想把它分成子字符串,其他字符串,即。

String gamesPlayed = "13";
String goals = "3";
etc

或类似的东西,这样我就可以找出父字符串中有多少个进球、助攻等。

非常感谢任何帮助。

【问题讨论】:

  • Regex 真的很容易学习并且非常有用。网上有很多文章,所以我建议你用谷歌搜索一下。

标签: java regex string split substring


【解决方案1】:

我会做什么:

  • 第一次拆分使用,
  • 然后使用:拆分

我在 Java 方面的经验几乎为零,但这就是我的建议:

String initialStr =
   "GAMES PLAYED: 13, GOALS: 3, ASSISTS: 6, POINTS: 9,"+
   " PLUS/MINUS: 5, PIM: 7";
String colon = ": ";
Map< String, Integer> keyValuePairs = new HashMap<>();// Java 7 diamond    
String[] parts = initialStr.split(",");
for( String keyValue : parts ) {
   String[] pair = keyValue.split(colon);
   keyValuePairs.put( pair[0], Integer.parseInt( pair[1] ));
}

问keyValuePairs如下:

assert keyValuePairs.get( "GAMES PLAYED" ) == 13;

【讨论】:

  • @nneonneo 我只希望上面没有语法错误(Java 真的不是我的事...):-)
  • 如果可以的话,我会再给你一个 +1 让你走出舒适区;)
  • 请在部件周围添加一个 for 循环并将结果放入 Map
  • @Aubin 这正是我的想法,但我不会尝试 - 因为最后我肯定会把事情搞砸。如果您在 Java 方面比我更有经验,那么请继续添加它作为一个完整的答案(这样对 OP 会更有帮助)。
  • OP初始字符串以Brayden Schenn, C GAMES PLAYED: 13而不是GAMES PLAYED开头。
【解决方案2】:

您可以使用以下正则表达式(([\w/]+):\s?(\d+)),? 来匹配字符串中的所有key:value,然后将GOALSgroup(2)3group(3) 一起提取。

正则表达式如下所示:

(            # capture key/value (without the comma)
  (          # capture key (in group 2)
    [\w/]+   # any word character including / one or more times
  )
  :          # followed by a colon
  \s?        # followed by a space (or not)
  (          # capture value (in group 3)
    \d+      # one or mor digit
   )
)
,?           # followed by a comma (or not)

考虑到您的字符串,它应该与以下内容匹配:

PLAYED: 13
GOALS: 3
ASSISTS: 6
POINTS: 9
PLUS/MINUS: 5
PIM: 7

这是 Java 代码:

String s = "Brayden Schenn, C GAMES PLAYED: 13, GOALS: 3, ASSISTS: 6, POINTS: 9, PLUS/MINUS: 5, PIM: 7";
Matcher m = Pattern.compile("(([\\w/]+):\\s?(\\d+)),?").matcher(s);
Map<String, Integer> values = new HashMap<String, Integer>();
// find them all
while (m.find()) {
   values.put(m.group(2), Integer.valueOf(m.group(3)));
}
// print the values
System.out.println("Games Played: " + values.get("PLAYED"));
System.out.println("Goals: " + values.get("GOALS"));
System.out.println("Assists: " + values.get("ASSISTS"));
System.out.println("Points: " + values.get("POINTS"));
System.out.println("Plus/Minus: " + values.get("PLUS/MINUS"));
System.out.println("Pim: " + values.get("PIM"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2016-07-18
    • 2020-08-07
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多