
Я был бы очень признателен за помощь с этим. Я работаю с большим корпусом текста, который был размечен с помощью XML-скрипта, и мне нужно привести некоторые вещи в порядок. А именно, есть несколько сотен чисел в квадратных скобках (например, '[1234]'), которые мне нужно удалить (включая скобки). Каждое число отличается, и в этих числах может быть от 3 до 5 цифр.
Второе, что мне нужно сделать, это разместить XML-теги вокруг некоторых других фрагментов текста. Это имена в круглых скобках. То есть, например:
Он (г-н Смит) сказал...
Что я хочу изменить на:
Он <annot> (Mr. Smith) </annot>
сказал...'.
Как мне выполнить оба эти изменения?
Я уже пробовал использовать Extended Mode и искать '[.*]', но он не возвращает никаких результатов. Когда я пробую то же самое с RegEx, я получаю много результатов, но, похоже, он ищет каждую квадратную скобку в корпусе.
решение1
Квадратные скобки — это специальный символ в регулярных выражениях ( [a-z]
означает любой символ в диапазоне a
от до z
), поэтому их придется экранировать.
Ваше выражение поиска станет \[\d+\]
(со \d+
значением одной или нескольких цифр). Однако вы хотите заменить это только цифрами. Вам нужно настроить группу захвата, используя скобки, и сослаться на нее в выражении замены. Ваши настройки станут:
- Искать:
\[(\d+)\]
- Заменить:
\1
Что касается вашей второй проблемы, я не уверен, что правильно ее понимаю в приведенном вами контексте... если в скобках указаны только имена, вы можете просто заменить их \([^\)]+\)
на <annot> \0 </annot>
, или, может быть, \(Mr\. [^\)]+\)
если именам предшествует Mr.
.
Если вдаваться в подробности, то это работает так:
- скобки, которые вы ищете, должны быть экранированы (так как они обычно используются для определения групп захвата, поэтому вы используете
\(
и\)
[^...]+
означает один или несколько символов, которые не являются...
- Таким образом, ваше поисковое выражение представляет собой открывающуюся скобку, за которой следуют любые символы, не являющиеся закрывающей скобкой (поэтому оно должно соответствовать именам), за которыми следует закрывающая скобка.
\0
представляет собой все искомое выражение в области замены
Если у вас есть список имен, которые нужно заменить, то вам лучше использовать его \(whatever name\)
в качестве поискового выражения, а если его нет, то это невозможно, поскольку вы не сможете заставить регулярное выражение «угадывать», что является именем, а что нет.