检查字符串是否包含特定的缩写

时间:2020-04-15 21:04:16

标签: r regex

这个问题是我之前的one的继续。我有向量的字符串。向量(字符串)的某些元素包含特定的缩写“ S.A.”。以及它的变化(有无点,也有多个空格)。

dino polska s.a.
elita sp.c. zofia szatkowska, tomasz szatkowski    #shouldn't be subseted
studio urody "julia" renata kochańska    #shouldn't be subseted
ccc s. a. 
ls airport services sa
restauracja aleksandra odejewska    #shouldn't be subseted
firma handlowa "eden ii" krystyna konowalska    #shouldn't be subseted
auto land polska s a

为了对符合条件的字符串(包含“ s.a.”缩写)进行子集化,我使用了以下代码:

subset(df, grepl('.s.?.a.?', col_1))

通常它可以工作,但是它也包含不包含缩写的字符串的子集。
我还尝试改善常规表达代码

'^.s.?.a.?&'
'^(.s.?.a.?)&'
'\\s+.s.?.a.?'
'\\.s.?.a.?'

但是它不起作用。
我的问题是是否存在像正则表达式的锚这样的东西,以强调我在寻找单独的单词/表达式而不是其中的一部分。缩写应被视为一个单独的单词,而不是单词的一部分,应避免使用像kochań SKA .s.?.a.?)之类的东西。

1 个答案:

答案 0 :(得分:2)

您可以使用

subset(df, grepl('\\bs\\.?\\s*a\\b', col_1))

请参见regex demo

详细信息

  • \bs-不包含任何字母,数字或s的{​​{1}}字母(因为_是单词边界)
  • \b-可选点
  • \.?-超过0个空格
  • \s*-一个a\b字母,后面没有任何字母,数字或a