Regex - все запятые, которые удовлетворяют двум (отрицательным) условиям - PullRequest
0 голосов
/ 02 марта 2019

Это довольно простой вопрос, так как я не очень знаком с RegEx, но я просто не могу найти ответ в Интернете (возможно, я не знаю, что искать в Google).

Я хочунаписать функцию, которая находит все запятые, которые:

  • не между "]" и "[" (как в [abc], [def])
  • не соблюдаютсяна «+» (как в abc, + def)

Я выяснил, что для этих двух экземпляров есть регулярные выражения

(?!\\])(\\,)(?!\\s\\[)

и

(\\,)(?!\\+)

(поправьте меня, если я ошибаюсь)

Но как мне соединить два в одной команде, чтобы моя функция идентифицировала все запятые, которые удовлетворяют этим двум условиям?У меня возникли некоторые трудности, когда я оборачиваюсь вокруг него, потому что это два негативных условия.Если это имеет какое-то значение, я использую R.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вы можете использовать регулярное выражение PCRE с базовыми функциями регулярного выражения R:

][^[]*\[(*SKIP)(*F)|,(?!\+)

См. Демонстрационную версию регулярного выражения .

Подробно

  • ][^[]*\[(*SKIP)(*F) - сопоставить и пропустить ], затем 0+ символов, отличных от [, а затем [ (то есть правило not between a "]" and a " [")
  • | - или соответствует
  • ,(?!\+) - запятая, за которой сразу же не следует буквальный знак +

R online demo :

x <- "[abc], [def] abc,+def abc,def"
reg <- "][^[]*\\[(*SKIP)(*F)|,(?!\\+)"
strsplit(x, reg, perl=TRUE)
## [[1]]
## [1] "[abc], [def] abc,+def abc" "def"
gsub(reg, "@", x, perl=TRUE)
## [1] "[abc], [def] abc,+def abc@def"
0 голосов
/ 02 марта 2019

Итак, вам нужны запятые:

  • Не предшествует]
  • Не следует ни +, ни [

Дляво-вторых, вы можете использовать отрицательный взгляд ((?!)).Для первого вы бы хотели его противоположность, которая является негативным взглядом сзади ((?<!)).

Это должно сделать это:

,(?<!\])(?!\+|\[)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...