Regex для размещения двойных кавычек для определенного поля - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть такая строка:

String a = 'ABC(rfg) OR DEF(3dsgf56737(fg)sdg) OR KLM(dfgrg) AND DEF(ghthd)';

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

String a = 'ABC(rfg) OR DEF("3dsgf56737(fg)sdg") OR KLM(dfgrg) AND DEF("ghthd")';

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Вы можете попробовать

String b = a.replaceAll("DEF\\((\\S+)\\)", "DEF(\"$1\")");
System.out.println(b);
1 голос
/ 02 декабря 2011

Какие инструменты вы используете для этого?СЭД?Python?Java?

Регулярное выражение, которое вы можете использовать с (например) sed:

's/DEF\((([^(]*|\([^)]*\))+)\)/DEF("\1")/g'

Значение g означает глобальное совпадение, а бит в DEF в основном ищетсовпавшие пары круглых скобок во внешней ((fg) в вашем примере) или другие не круглые скобки.

Конечно, вы бы приспособили регулярное выражение для вашей конкретной ситуации - например, если вы когда-либо толькоожидайте, что в DEF будут буквенно-цифровые символы и круглые скобки, тогда вместо [^(] вы можете использовать [a-z0-9] и т. д.

@ Комментарий NullUserException по-прежнему уместен - вы пометили вопрос java и python, но неуказал, какой инструмент / язык вы собираетесь использовать?

Например, вы можете использовать sed:

echo 'ABC(rgt) ... etc' | sed -r -e 's/DEF\((([^(]*|\([^)]*\))+)\)/DEF("\1")/g'

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

0 голосов
/ 02 декабря 2011

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

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