Проверьте, содержит ли строка указанное c сокращение - PullRequest
1 голос
/ 16 апреля 2020

Этот вопрос является продолжением моего предыдущего одного . У меня есть вектор строк. Некоторые элементы вектора (строки) содержат заданную c аббревиатуру «SA» и ее вариацию с точками и без них, а также с несколькими пробелами.

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

Для того, чтобы подмножество строк соответствовало условию (содержит «sa» "Аббревиатура) Я использовал следующий код:

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

Обычно это работает, но он также поднабор строк, которые не содержат аббревиатуру. Я также пытался улучшить свой код регулярного выражения

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

Но это не работает. Мой вопрос заключается в том, существует ли что-то вроде якоря для регулярного выражения, чтобы подчеркнуть, что я ищу отдельное слово / выражение, а не его часть. Аббревиатура должна восприниматься как отдельное слово, а не как часть слова, и следует избегать чего-то вроде kochań SKA (.s.?.a.?).

1 Ответ

2 голосов
/ 16 апреля 2020

Вы можете использовать

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

См. regex demo

Подробности

  • \bs - s буква, которой не предшествует ни одна буква, di git или _ (поскольку \b является границей слова)
  • \.? - необязательная точка
  • \s* - 0+ пробелов
  • a\b - буква a, за которой не следует ни одной буквы, di git или _
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...