【问题标题】:Word Phrases in Java RegexJava 正则表达式中的单词短语
【发布时间】:2017-09-18 17:37:48
【问题描述】:

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

我一直在尝试将其分解,以便我可以得到“超液体漂白剂”和“山新鲜”之类的词相,但不能得到两者之间的空白。我目前的代码是:

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

而且我不能比这更进一步。前两个词的词数不同,因此任何针对特定词数的表达式都不起作用。我是在正确的轨道上还是有更好的方法来做我想做的事情?

【问题讨论】:

标签: java regex


【解决方案1】:

您使用的是图片而不是为我们提供基于文本的示例,但这应该适用于您假设“单词短语”始终由 3 个以上空格分隔,并且您永远不会期望单个“单词”中有制表符或 3 个以上空格短语”

假设输入:

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

正则表达式:

\b(\S+(?:  ?\S+)*)\b

解释(另见:more detail and output of run against assumed input):

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

【讨论】:

    猜你喜欢
    • 2013-11-09
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    相关资源
    最近更新 更多