разделить на весь разделитель, но не на каждый компонент разделителя - PullRequest
2 голосов
/ 01 апреля 2020

Я хочу разбить строку и сохранить там, где она разбивается.

str = 'Glenn: $53  Sutter: $44'
strsplit(str, '[0-9]\\s+[A-Z]', perl = TRUE)
# [[1]]
# [1] "Glenn: $5"  "utter: $44" ## taking out what was matched
strsplit(str, '(?=[0-9]\\s+[A-Z])', perl = TRUE)
# [[1]]
# [1] "Glenn: $5"     "3"             "  Sutter: $44" ## splitting at each component of the match

Есть ли способ разделить его на весь разделитель? Так что возвращается:

# [1] "Glenn: $53"  "Sutter: $44"

Ответы [ 2 ]

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

Мы можем использовать регулярное выражение для разбиения на один или несколько пробелов (\\s+) перед заглавной буквой и после ди git

strsplit(str, "(?<=[0-9])\\s+(?=[A-Z])", perl = TRUE)[[1]]
#[1] "Glenn: $53"  "Sutter: $44"
0 голосов
/ 01 апреля 2020

Насколько я понимаю, вы sh разделите на пробелы следующие строки, состоящие из знака доллара, за которым следуют одна или несколько цифр, при условии, что за пробелами следует буква.

При установке perl = true , вы будете использовать Perl движок регулярных выражений, который поддерживает \K, что фактически означает отбрасывание всего подходящего. Поэтому вы можете использовать следующее регулярное выражение (с установленным флагом безразличного регистра):

\$\d+\K\s+(?=[a-z])

Демо

В некоторых случаях, как здесь, \K может использоваться в качестве замены для вида сзади переменной длины. Увы, большинство движков регулярных выражений, включая Perl, не поддерживают просмотр за пределами переменной длины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...