1

这似乎是一件基本的事情,但我似乎无法理解正则表达式我以前从未真正使用过它们,现在我遇到了它们会很有用的时候。

在过去的一个小时里,我查看了示例和过去的问题,但仍然不明白。我的问题是我有一个字符串

"(2 h 9 min from now) | +18.7 feet"

我想分成两个字符串

String a = "2 h 9 min from now";

String b = "18.7 feet";

如何使用正则表达式拆分字符串并在其他字符串中使用“正则表达式”?

到目前为止,我想出了:

stringx.split("(%s) | +%s \n");

stringx.split("(\\w) | +\d.\d feet");

但我不知道如何将 %s (如果那是正确的话)放入正则表达式之外的字符串中

4

4 回答 4

2

当您想删除一些字符(()and )时,最安全的方法是标准正则表达式与and类+匹配:PatternMatcher

public static void main (String[] args) {
    String input= "(2 h 9 min from now) | +18.7 feet";
    System.out.println("Input: "+ input);
    Pattern p = Pattern.compile("\\(([^)]+)\\) \\| \\+(\\d+\\.\\d feet)");
    Matcher m = p.matcher(input);
    String a = null, b = null;
    if (m.find()) {
        a = m.group(1);
        b = m.group(2);
    }
    System.out.println("a: "+ a);
    System.out.println("b: "+ b);
}

输出:

Input: (2 h 9 min from now) | +18.7 feet
a: 2 h 9 min from now
b: 18.7 feet

在此处查看在线演示

于 2013-10-16T20:58:01.067 回答
0
StringTokenizer stringtokenizer = new StringTokenizer("Your string", "|");
while (stringtokenizer.hasMoreElements()) {
System.out.println(stringtokenizer.nextToken());
}
于 2013-10-16T20:53:51.687 回答
0

我会分两步做到这一点。

  • 首先,你分裂
  • 然后,你消毒

例如:

// the original text
String text = "(2 h 9 min from now) | +18.7 feet";
// splitting on the "|" separator
String[] splitted = text.split("\\|");
// printing the raw "split" array
System.out.println("Raw: " + Arrays.toString(splitted));
// iterating over the raw elements of the array
for (String split: splitted) {
    // replacing all "raw" strings with the group composed of 
    // word characters in between non word characters (if any)
    System.out.println(split.replaceAll("^\\W*(.+?)\\W*$", "$1"));
}

输出:

Raw: [(2 h 9 min from now) ,  +18.7 feet]
2 h 9 min from now
18.7 feet

不是最干净的解决方案,但它会给你一个开始。

于 2013-10-16T21:02:10.650 回答
0

您可以使用:

String s = "(2 h 9 min from now) | +18.7 feet";
Pattern p = Pattern.compile("^\\(([^)]+)\\)\\s*\\|\\s*\\+(.*)$");
Matcher m = p.matcher(s);
if (m.find())               
    System.out.println(m.group(1) + " :: " + m.group(2)); 

 // 2 h 9 min from now :: 18.7 feet
于 2013-10-16T20:51:44.457 回答