如何使用正则表达式提取内部单词

时间:2013-01-31 22:25:05

标签: regex

我正在尝试仅匹配来自一系列地址的街道名称。地址可能如下所示:

  

23 Barrel Rd。

     14老磨坊博士。

     

65-345 Howard's Bluff

我想用正则表达式来匹配“Barrel”,“Old Mill”和“Howard's”。我需要弄清楚如何排除最后一个字。到目前为止,我有一个lookbehind排除数字,我可以包括单词和空格和“'”使用这个:

(?<=\d\s)(\w|\s|\')+

如何排除最后一个单词(可能会或可能不会在一段时间内结束)?我想我应该使用前瞻,但我无法弄清楚如何制定它。

4 个答案:

答案 0 :(得分:0)

我相信你想要的前瞻是(?=\s\w+\.?$)

\s:您不想包含最后一个空格 \w:至少一个单词字符(A-Z,a-z,0-9或'_') \.?:可选期间(缩写为“St.”) $:确保这是最后一句话

如果在换行符之前可能存在其他空格,则只需将其更改为(?=\s\w+\.?\s*$)

答案 1 :(得分:0)

你不需要这样做:

/^[-\d]+ ([\w ']+) \w+\.?$/
  • 匹配一个或多个数字和连字符
  • 空间
  • 将字母,数字,空格,撇号与捕获组1匹配
  • 空间
  • 匹配最后一个单词和可选期间

示例Ruby实现:

regex = /^[-\d]+ ([\w ']+) \w+\.?$/

tests = [ "23 Barrel Rd.",  "14 Old Mill Dr.", "65-345 Howard's Bluff" ]

tests.each do |test|
  p test.match(regex)[1]
end

输出:

"Barrel"
"Old Mill"
"Howard's"

答案 2 :(得分:0)

为什么不匹配你想要的?如果我理解得很好,你需要在数字后面的所有单词中排除最后一个单词。单词由空格分隔,因此只需获取数字和最后一个空格之间的所有内容。

Example

\d+(?:-\d+)? ((?:.)+) 注意:最后有一个空格。

Tha将以1次N次结束你想要的东西。

如果您只想匹配确切的文字,可以使用\K(不是每个正则表达式引擎都支持),但是:Example

使用正则表达式\d+(?:-\d+)? \K.+(?= )

答案 3 :(得分:0)

另一种选择是使用大多数脚本语言中提供的split()函数。这是您想要的Python版本:

stname = address.split()[1:-1]

(此处address是原始地址行,stname是街道的名称,即您要提取的内容。)