1

我正在尝试使用以下代码定位(然后提取)重复的短语。我需要以“大约”开头并以“关闭”结尾的短语。

例如“关闭了大约 1.629 亿美元的总资产和 1.445 亿美元的总存款”

str_locate(x,"(\b[Aa]pproximately\b)(.*)(\b[Cc]losed\b)")

str_extract(x,"(\b[Aa]pproximately\b)(.*)(\b[Cc]losed\b)")

上面的代码为短语起点和终点返回 NA。这是短语所在的字符向量示例。(它是公开可用的 FDIC 信息的网页)

"206-4662)。\r\n\r\n12 月 \r\n\r\n\r\n 总资产约 1.629 亿美元、总存款约 1.445 亿美元的亚利桑那州凤凰城西部国家银行已关闭。华盛顿Federal, Seattle, WA 已同意承担除某些经纪存款之外的所有存款。\r\n(PR-195-2011) \r\n\r\n\r\n\r\n Premier Community Bank of the Emerald Coast , Crestview, FL 已关闭,总资产约为 1.26 亿美元,存款总额为 1.121 亿美元。Summit Bank, NA, Panama City, FL 已同意承担所有存款。\r\n(PR-194-2011)"

我可能不正确地使用 reg 表达式,因为我是新手,所以非常感谢任何建议。

4

1 回答 1

5

\b是 ASCII 退格。如果您希望它表示“单词边界”,则需要转义反斜杠:

str_locate(x,"(\\b[Aa]pproximately\\b)(.*)(\\b[Cc]losed\\b)")

此外,您不需要在关键字周围加上括号,除非您想稍后检查它们的大小写。并且在将函数用于正则表达式时,您可以不区分大小写地匹配(?i)修饰符。perl()

最后,请注意如果and.*之间有换行符(这可以用 修复)将不匹配,并且如果字符串中存在一对以上的关键字,则可能会产生不需要的结果。approximatelyclosed(?s)

因此,您可能应该将您的正则表达式更改为

str_locate(x, perl("(?is)\\bapproximately\\b(.*?)\\bclosed\\b"))
于 2012-09-25T10:17:44.740 回答