带有正则表达式的Java String.split()

时间:2012-11-05 02:20:56

标签: java regex string parsing split

我有一个解析问题。 我有句子存储为字符串。我想抓住每个句子中的每个单词但是我想过滤掉我抓住的单词。例如,假设我有一个如下句子:

  

地狱0 3v3ryb0dy @ stackoverflow $ people \暗示女王$等于〜皇后 - > 〜人。   /#逻辑

我会做以下事情:

  1. 抓住'H3ll0'
  2. 抓住3v3ryb0dy
  3. 扔掉@
  4. 从'$ people'中抓住'人'
  5. 从'\ notes'
  6. 抓取'暗示'
  7. 从'queen $'中抓住'女王'
  8. 抓住'等于'
  9. 从'〜queen'抓住'女王'
  10. 扔掉 - >
  11. 从'〜人'中抓住'人'
  12. 从'/#logic'中抓取'逻辑'
  13. 基本上我只想要字母数字字符,每当我想要一个单词之前或之后有一些其他字符如\时我想忽略这个其他字符。

    目前我在做:sentence.split(" ")

    这可以从句子中获取单词,但是当我希望它们被视为同样时,它会抓住'$ people'和'〜people'并以不同的方式对待它们。

    1. 我怎样才能做到这一点?
    2. 正则表达式会帮助我吗?

2 个答案:

答案 0 :(得分:4)

使用此正则表达式\\W+拆分字符串,将其拆分为一个或多个非单词字符。

String sentence = "Hell0 3v3ryb0dy @ stackoverflow $people \\implies queen$ equals ~queen --> ~people. /#logic";
String[] split = sentence.split("\\W+");
System.out.println(Arrays.asList(split));

<强>输出

  

[Hell0,3v3ryb0dy,stackoverflow,people,implies,queen,equals,queen,people,logic]

答案 1 :(得分:1)

我正在使用这个正则表达式 [^A-Za-z0-9 ]+(已编辑) 我得到的输出是:
Hell0 3v3ryb0dy stackoverflow people implies queen equals queen people logic

这是你期待的吗?

myregextester

剪断
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Module1{
  public static void main(String[] asd){
  String sourcestring = "source string to match with pattern";
  Pattern re = Pattern.compile("[^A-Za-z0-9 ]+",Pattern.CASE_INSENSITIVE);
  Matcher m = re.matcher(sourcestring);
  String result = m.replaceAll("");
  }
}

$sourcestring after replacement:
Hell0 3v3ryb0dy stackoverflow people implies queen equals queen people logic