Поиск…


Вступление

В этом документе представлены основы регулярных выражений, используемых в R. Для получения дополнительной информации о синтаксисе регулярных выражений R см. « ?regex . Полный список операторов регулярного выражения см. В этом руководстве ICU для регулярных выражений .

Используйте `grep`, чтобы найти строку в символьном векторе

# General syntax:   
# grep(<pattern>, <character vector>)

mystring <- c('The number 5',
              'The number 8',
              '1 is the loneliest number',
              'Company, 3 is',
              'Git SSH tag is [email protected]',
              'My personal site is www.personal.org',
              'path/to/my/file')

grep('5', mystring)
# [1] 1
grep('@', mystring)
# [1] 5
grep('number', mystring)
# [1] 1 2 3

x|y означает поиск «x» или «y»,

grep('5|8', mystring)
# [1] 1 2
grep('com|org', mystring)
# [1] 5 6

. является специальным символом в Regex. Это означает «соответствовать любому персонажу»,

grep('The number .', mystring)
# [1] 1 2

Будьте осторожны при попытке сопоставить точки!

tricky <- c('www.personal.org', 'My friend is a cyborg')
grep('.org', tricky)
# [1] 1 2

Чтобы соответствовать буквальному символу, вам нужно избежать строки с обратным слэшем ( \ ). Тем не менее, R пытается найти escape-символы при создании строк, поэтому вам действительно нужно избежать самой обратной косой черты (т. Е. Вам нужно удвоить символы регулярного выражения escape- символов).

grep('\.org', tricky)
# Error: '\.' is an unrecognized escape in character string starting "'\."
grep('\\.org', tricky)
# [1] 1

Если вы хотите совместить один из нескольких символов, вы можете обернуть эти символы в скобки ( [] )

grep('[13]', mystring)
# [1] 3 4
grep('[@/]', mystring)
# [1] 5 7

Может быть полезно указать последовательности символов. Например, [0-4] будет соответствовать 0, 1, 2, 3 или 4, [AZ] будет соответствовать любой заглавной букве, [Az] будет соответствовать любой прописной или строчной букве, а [A-z0-9] будет соответствовать любому буква или номер (т.е. все буквенно-цифровые символы)

grep('[0-4]', mystring)
# [1] 3 4
grep('[A-Z]', mystring)
# [1] 1 2 4 5 6

R также имеет несколько классов ярлыков, которые могут использоваться в скобках. Например, [:lower:] является коротким для az , [:upper:] является сокращением для AZ , [:alpha:] - Az , [:digit:] - 0-9 , а [:alnum:] - A-z0-9 . Обратите внимание, что все эти выражения должны использоваться внутри скобок; например, чтобы соответствовать одной цифре, вы можете использовать [[:digit:]] (обратите внимание на двойные скобки). В качестве другого примера, [@[:digit:]/] будет соответствовать символам @ , / или 0-9 .

grep('[[:digit:]]', mystring)
# [1] 1 2 3 4
grep('[@[:digit:]/]', mystring)
# [1] 1 2 3 4 5 7

Кронштейны также могут использоваться, чтобы отрицать совпадение с каратом ( ^ ). Например, [^5] будет соответствовать любому символу, отличному от «5».

grep('The number [^5]', mystring)
# [1] 2


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow