如何在正则表达式中编写此模式?

时间:2010-11-12 05:13:51

标签: regex

请帮助我们从以下句子中提取单词:

  从那以后,他一直领导着美国以政府为中心的管理工作,从而完成了对该地区的任务。

我们怎能拥有:

He's 
led 
U.S. 
efforts 
for 
government-centered
management 
ever 
since
resulting 
in 
the  
missions 
to 
the 
area

非常感谢你。

编辑和评论:

我们感谢所有人的帮助。

4 个答案:

答案 0 :(得分:1)

您将很难区分etc.area.(或者,例如,U.S.area.。还要考虑像“他曾在美国做过多次努力”,你不会在一句话结束时把这段时间加倍。你得到的最好的就是接近。

答案 1 :(得分:1)

根据您正在使用的正则表达式风格,您可以使用以下内容:

/\b(\S+[^,.])\b/

作为替代方法,您可以使用Unicode代码点[^,.]替换\P{P}

修改

一个更简单的表达式适用于单词级别,但它将匹配U.S而不是U.S.

/\w\S+\w/

答案 2 :(得分:1)

对于U.S.,您需要在正则表达式中指定该裸字。所以你的正则表达式将是:

\s?(U\.S\.|.*?)[., ]

这对我有用。

答案 3 :(得分:1)

在您的情况下,您可以拆分正则表达式

(?:(?<![A-Z])\.|,)?(\s+|$)

这在空格上分割,可选地以点/逗号开头(但只有在前面没有大写ASCII字母的情况下才在点上)。

它会在像etc.这样的边缘情况下失败,所以如果你有一个列表,如果正则表达式引擎支持lookbehinds中的变量重复,你可以将它们用于正则表达式。你在用哪一个?

电子。 G。

(?:(?<![A-Z]|\betc|\bca|\bapprox)\.|,)?(\s+|$)

会拆分

He's led U.S. efforts for management, resulting in approx. 3 times the missions to the area, etc.

He's
led
U.S.
efforts
for
management
resulting
in
approx.
3
times
the
missions
to
the
area
etc.

<强>解释

(?:          # match either...
 (?<![A-Z]   # (as long as not preceded by A-Z
  |\betc     # or etc
  |\bca      # or ca
  |\bapprox  # or approx
 )           # ...)
 \.          # a dot
 |           # or
 ,           # a comma
)?           # if present.
(\s+|$)      # then either match whitespace or the end of the string.