Выражение Regex в R (недопустимое использование операторов повторения) не работает после экранирования - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть документ с таким текстом, который я пытаюсь выбрать с помощью регулярного выражения определенной части:

Раздел I - Живые животные;Продукты животного происхождения (Глава 1-5) Глава 1 Живые животные

Я использую это выражение, которое работает вне R:

Section\s[A-Z]+\s?-\s[^(]*+\(Chapter\s[0-9]+-[0-9]+\)

Вот как яВы написали выражение в R (после ошибки «Недопустимое использование операторов повторения» вышли из +), но выражение не работает - ничего не происходит.Если кто-нибудь увидит что-то, что я здесь упускаю, было бы очень признательно.

Section\\s[A-Z]\\+\\s?-\\s[^(]*\\+\\(Chapter\\s[0-9]+-[0-9]\\+\\)

Я пытаюсь выделить и удалить текст следующим образом:

df=data.frame(x="Section I - Live Animals; Animal Products (Chapter 1-5) Chapter 1 Live Animals ")
df=gsub("Section\\s[A-Z]\\+\\s?-\\s[^(]*\\+\\(Chapter\\s[0-9]+-[0-9]\\+\\)", "", df$x)

1 Ответ

0 голосов
/ 08 декабря 2018

Регулярное выражение TRE не поддерживает притяжательные квантификаторы , поэтому квантификатор *+ недопустим.Вы хотите * квантификатор, таким образом, не экранируйте +, просто удалите его.

Также имеет смысл обрезать вывод, поэтому я предлагаю использовать

df <- trimws(gsub("Section\\s[A-Z]+\\s?-\\s[^(]*\\(Chapter\\s[0-9]+-[0-9]+\\)", "", df$x))
## => [1] "Chapter 1 Live Animals"

См. R демо онлайн .

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