Java正则表达式中的单词短语

时间:2017-09-18 17:37:49

标签: java regex

我目前正在我的Java类中执行一个项目,该项目涉及扫描文本文件,然后用java正则表达式打破每一行。文本文件中其中一行的示例如下所示:

Picture of text

我一直试图打破这个问题,这样我就可以得到像“超液体漂白剂”和“山地新鲜”这样的词语,而不是中间的白色空间。我目前的代码是:

([\\w]+|[ ]?)\\b

我无法得到更远的东西。前两个单词的单词数量不同,因此任何针对特定数量单词的表达都不起作用。我是在正确的轨道上还是有更好的方式来做我想做的事情?

1 个答案:

答案 0 :(得分:0)

您使用了图片而不是为我们提供基于文本的示例,但这应该适用于您假设"单词短语"总是被3个以上的空格隔开,你永远不会想到个人的短语或3个以上的空格"单词短语"

假设输入:

post_max_size = 1M
file_uploads = On
max_file_uploads = 1
memory_limit = 40M
upload_max_filesize = 1M

正则表达式:

Disinfecting Wipes        Lemon Fresh                       35 pkg      3.39
Ultra Liquid Bleach       Mountain Fresh                    96 oz       2.39
FF & LS Broth             Chicken                           32 oz       2.99

说明(另见:more detail and output of run against assumed input):

  • \b(\S+(?: ?\S+)*)\b :字边界(字词char(\b)和非字char(\w之间的零宽度标记)
  • \W:匹配组从此处开始
    • (:一个或多个非空格字符
    • \S+:非匹配组从此处开始
      • (?::一个文字空间,然后是0或1个文字空间
      • ?:一个或多个非空格字符
    • \S+:此非匹配组可能出现零次或多次
  • )*:匹配组的结尾
  • ):字边界