2

Я был бы очень признателен за помощь с этим. Я работаю с большим корпусом текста, размеченным с помощью XML-скрипта, и мне нужно кое-что привести в порядок. В частности, в квадратных скобках есть несколько сотен чисел (например, «[1234]»), которые нужно удалить (включая скобки). Каждый номер индивидуален и может содержать от 3 до 5 цифр.

Второе, что мне нужно сделать, это разместить теги XML вокруг некоторых других фрагментов текста. Это имена в круглых скобках. То есть вроде:

Он (мистер Смит) сказал ...

Который я хочу изменить на:

Он <annot> (Mr. Smith) </annot> сказал ...».

Как я могу выполнить оба этих изменения?

Я уже пытался использовать расширенный режим и искать «[. *]», Но он не возвращает хитов. Когда я пытаюсь сделать то же самое с RegEx, я получаю много хитов, но кажется, что он ищет каждую квадратную скобку в корпусе.

1 ответ1

1

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

Ваше поисковое выражение станет \[\d+\] (где \d+ означает одну или несколько цифр). Однако вы хотите заменить это только цифрами. Вам нужно настроить группу захвата, используя скобки, и ссылаться на нее в выражении замены. Ваши настройки становятся:

  • Искать: \[(\d+)\]
  • Заменить на: \1

Что касается вашей второй проблемы, я не уверен, что правильно понимаю ее в контексте, который вы задаете ... если в скобках указаны только имена, вы можете просто заменить \([^\)]+\) на <annot> \0 </annot> или, может быть, \(Mr\. [^\)]+\) если перед именами стоит Mr.

Чтобы вдаваться в подробности, то, как это работает, так:

  • скобки, которые вы ищете, должны быть экранированы (так как они обычно используются для определения групп захвата, поэтому вы используете \( и \)
  • [^...]+ означает один или несколько символов, которые не ...
  • поэтому ваше поисковое выражение является открывающей скобкой, за которой следуют любые символы, которые не являются закрывающей скобкой (поэтому она должна совпадать с именами), за которой следует закрывающая скобка.
  • \0 представляет все искомое выражение в области замены

Если у вас есть список этих имен для замены, то вам лучше использовать \(whatever name\) в качестве поискового выражения, а если нет, то это невозможно, так как вы не можете сделать регулярное выражение "угадать" что такое имя, а что нет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .