1

我有一个解析问题。我有存储为字符串的句子。我想抓取每个句子中的每个单词,但是我想过滤我抓取的单词。例如说我有一个类似下面的句子:

Hell0 3v3ryb0dy @ stackoverflow $people \暗示女王$ 等于 ~queen --> ~people。/#逻辑

我会做以下事情:

  1. 抓住'H3ll0'
  2. 抢3v3ryb0dy
  3. 扔掉@
  4. 从 '$people' 中获取 'people'
  5. 从 '\implies' 中获取 'implies'
  6. 从 'queen$' 中获取 'queen'
  7. 抓住“等于”
  8. 从'~queen'中抢'queen'
  9. 扔掉-->
  10. 从 '~people' 中获取 'people'
  11. 从'/#logic'中获取'逻辑'

本质上,我只想要字母数字字符,每当我在单词之前或之后有一些其他字符(例如 \)时,我都想忽略这个其他字符。

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

这会从句子中获取单个单词,但它会抓取 '$people' 和 '~people' 并在我希望它们受到相同对待时以不同方式对待它们。

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

2 回答 2

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,人,暗示,女王,等于,女王,人,逻辑]

于 2012-11-05T02:40:46.573 回答
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
于 2012-11-05T02:33:08.447 回答