正则表达式匹配将忽略字符串中的标点符号

时间:2014-08-22 19:37:09

标签: ruby regex

**编辑**

我正在尝试将源A中的一个名称(ST MARYS MEDICAL CENTER)与源B中的另一个名称(St. Mary's Medical Center: Welcome)进行比较。 A和B不是数组。

我想保留St. Mary's Medical Center。从本质上讲,我需要确认它们是同一个机构,并使价值“正常化”。

我想忽略大小写,所有句点(.)和所有撇号(')。如果匹配,我希望保留B中的匹配值。

例如:

> a = "ST MARYS MEDICAL CENTER"
=> "ST MARYS MEDICAL CENTER"

> b = "St. Mary's Medical Center: Welcome"
=> "St. Mary's Medical Center: Welcome"

# need help here
> re = /#{a}[^'.]*/i
=> /ST MARYS MEDICAL CENTER[^'.]*/i

> re.match(b)[0]
=> "St. Mary's Medical Center"

假设我得到了正确的正则表达式,匹配是否会包含标点符号?

2 个答案:

答案 0 :(得分:2)

我建议不要打扰正则表达式吗?

相反,请尝试剥离标点符号并更新b,然后直接比较字符串以查看它们是否匹配。

 b.upcase.sub(/[^\w\s]/, '') == a

答案 1 :(得分:0)

你也可以使用这样的String#scan

a = "St. Mary's Medical Center"
match = "ST MARYS MEDICAL CENTER"
a.upcase.scan(/[^.']*/).join == match
#=> true