Как избежать строк, заключенных в двойные кавычки с помощью регулярных выражений? - PullRequest
0 голосов
/ 05 января 2019

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

<code>"Lorem ipsum mauris "libero" non "pulvinar" suscipit, nis "aenean" <br/>curae odio lobortis "nulla" suspendisse"

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

<code>((\")(\S+)(\"))

Результат:
<code>"libero","pulvinar","aenean"
что противоположно тому, что я хочу
но когда я пытаюсь отменить шаблон:
<code>[^((\")(\S+)(\"))]
строки, не заключенные в двойные кавычки, не попадают в цель:

Что я хочу, это:

<code>"Lorem ","ipsum","mauris","non","suscipit",",","nis","curae",<br/>"odio","lobortis", "suspendiss"


Буду признателен за любую помощь

1 Ответ

0 голосов
/ 05 января 2019

Классы символов отменяют только отдельные символы и не могут отрицать шаблон, как вы пытались.

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

(?!<")\b\w+\b(?!")

Здесь граница слова \b гарантирует, что частичное слово не должно быть обнаружено как совпадение. Например, в слове "libero", если мы не поместим \b вокруг регулярного выражения, то оно может обнаружить iber как совпадение с середины этого слова.

Демо

Java-код для того же был бы,

String s = "Lorem ipsum mauris \"libero\" non \"pulvinar\" suscipit, nis \"aenean\" curae odio lobortis \"nulla\" suspendisse";
Pattern p = Pattern.compile("(?!<\")\\b\\w+\\b(?!\")");
Matcher m = p.matcher(s);

while (m.find()) {
    System.out.println(m.group());
}

Какие отпечатки,

Lorem
ipsum
mauris
non
suscipit
nis
curae
odio
lobortis
suspendisse

Edit:

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

(?!<")\b\w+\b(?!")|,

Хотя теперь я предполагаю, что в вашей строке могут быть и другие специальные символы, отличные от запятой, и в этом случае вы можете использовать такой класс символов, как этот [,.!;], а не просто запятую. Кроме того, в зависимости от того, как вы хотите сгруппировать эти символы, будь то непрерывно, например ,;! (затем используйте [,.!;]+) или каждый из этих специальных символов по отдельности, просто сохраните класс символов.

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