Удалите числовую часть буквенно-цифровых строк, но сохраните чистые числа - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь очистить некоторые строки, которые содержат комбинацию букв и цифр

a <- c("Hello World","Hello4 World","12345","Hello World 4","4Hello World5","Hello 4", "Hello4")

Я пытаюсь удалить числовую часть буквенно-цифровых строк, но сохраняю чистые числа или, когда число разделяется пробелом, вывод, который я ищу -

b <- c("Hello World","Hello World","12345","Hello World 4","Hello World", "Hello 4","Hello")

Строки могут быть чем угодно и не обязательно «Привет» или «Мир», я пробовал различные комбинации регулярных выражений, но не смог получить то, что хотел.

Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 28 августа 2018
gsub('(?i)(?<=[a-z])\\d+|\\d+(?=[a-z])','',a,perl=T)
[1] "Hello World"   "Hello World"   "12345"         "Hello World 4" "Hello World"   "Hello 4"       "Hello"   

Пояснение:

  • ?i используется для игнорирования случаев. т.е. вы также можете использовать аргумент ignore.case = TRUE

  • (?<=[a-z])\\d+ Это обзор, в котором вы ищете цифру (ы), то есть \\d+ immediately preceded by a letter (? <= [A-z]) `</p>

  • | или

  • \\d+(?=[a-z]) это предвидение, при котором вы ищите цифру (ы) \\d+, за которой сразу следует буква (?=[a-z]).

Замените это пустой строкой. т.е. replacement ='' является вторым аргументом функции gsub

gsub('([a-z])\\d+|\\d+([a-z])','\\1\\2',a,ignore.case = T)
[1] "Hello World"   "Hello World"   "12345"         "Hello World 4" "Hello World"   "Hello 4"       "Hello" 

Это следует почти тому же трюку, но вместо использования обходных путей мы используем обратную ссылку.

  • ([a-z])\\d+ захватить букву, которая находится перед цифрой (цифрами) в качестве группы 1
  • |\\d+([a-z]) захватить букву, которая следует сразу за цифрами как группа 2

Теперь замените все выражение захваченными буквами, например \\1\\2

Вы можете смешивать два регулярных выражения по своему усмотрению.

0 голосов
/ 28 августа 2018

Использовать регулярное выражение после разбиения ввода на пробел

[A-Za-z] - all letters 

^[0-9] - all digits
...