Если вы хотите разделить пробелы, за которыми следует -
или .
, вам нужно использовать просмотр вперед после, когда вы найдете пробел.
strsplit(mystring, " +(?=[-.])", perl=TRUE)
#[[1]]
#[1] "5 15 3 23 11 59 44.7" "-.263226218521e-03" ".488853402202e-11"
#[4] ".000000000000e+01"
Обратите внимание, что считается хорошей практикой использовать зарезервированное слово TRUE
(т. е. его нельзя переопределить) вместо T
, которое можно переопределить.
Если по какой-то причине вы хотите сначала поставить просмотр вперед, вам нужно будет сопоставить как пробелы, так и [-.]
внутри просмотра вперед, а затем сопоставить те же пробелы вне регулярного выражения:
strsplit(mystring, "(?= +[-.]) +", perl=TRUE)
[[1]]
[1] "5 15 3 23 11 59 44.7" "-.263226218521e-03" ".488853402202e-11"
[4] ".000000000000e+01"
Это работает, потому что просмотр вперед имеет нулевую ширину, что означает, что он фактически не использует эти символы и не перемещается вперед от начальной позиции совпадения. Вы остаетесь прямо в начале совпадения, что позволяет вам снова сопоставлять те же пробелы вне просмотра вперед.
Ваш первоначальный подход не работает из-за характера просмотра вперед с нулевой шириной. По сути, вы просите просмотреть текущую позицию, не продвигаясь вперед, чтобы увидеть, есть ли .
или -
. Затем, если они найдены, поищите в том же месте одно или несколько мест. В том месте, где вы нашли .
или -
, не может быть пробела.
person
Jota
schedule
28.12.2015
dput()
вашей строки. - person   schedule 28.12.2015