Регулярное выражение с квантификаторами - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь исправить некоторые ошибки распознавания, и мне нужно заменить '' (двойная вершина) на " (кавычки). Я использую Subtitledit (я думаю, что он использует C # Regex).

Мне нужно соответствовать '' каждый раз, но не в этой ситуации:

some text 'undefined length phrase/phrases''

перед первым ' должен стоять пробел, после которого следует \w.

В основном я хочу соответствовать '', если ему не предшествует \s'\w.*. В этом примере:

''E poi disse: 'Ne voglio un po'', ed andò via.''

Я хочу сопоставить первый и последний '', но не тот, что в середине, потому что ему предшествует 'Ne voglio un po.

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

Ответы [ 3 ]

1 голос
/ 07 июня 2019

Вы можете сопоставить их обоих как разделителей.
В вашем случае это '', что вы хотите сопоставить как 2 разделителя.

Вот как это делается

Найти ('')((?:(?:(?!''|'[^']*'')[\S\s])*(?:'[^']*'')?)*)('')
Заменить "$2"

https://regex101.com/r/Ii0aPe/1

_______________________________________

Если вышеперечисленное не работает для вас, вы можете сбросить первый ('') и запустить
.

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

Обратите внимание на это предостережение: строка, которая содержит 'Ne voglio un po''
, будет преобразована в 'Ne voglio un po".
Это то, что происходит, когда вы не используете сбалансированные разделители.

Найти: ((?:(?:(?!''|'[^']*'')[\S\s])*(?:'[^']*'')?)*)('')((?:(?:(?!''|'[^']*'')[\S\s])*(?:'[^']*'')?)*)
Заменить: $1"$3

https://regex101.com/r/KTYhmq/1

Расширен

 (                             # (1 start)
      (?:
           (?:
                (?! '' | ' [^']* '' )
                [\S\s] 
           )*
           (?: ' [^']* '' )?
      )*
 )                             # (1 end)
 ( '' )                        # (2)
 (                             # (3 start)
      (?:
           (?:
                (?! '' | ' [^']* '' )
                [\S\s] 
           )*
           (?: ' [^']* '' )?
      )*
 )                             # (3 end)
0 голосов
/ 07 июня 2019

Я решил пойти с решением 3 регулярных выражений.

  1. Я временно заменил проблемную часть комбинацией символов, которую, как я знаю, больше нигде в тексте не найти. Я выбрал § £, как это .
  2. Затем просто замените '' на ", как this .
  3. Наконец, заменили § £, чтобы все восстановилось, как было. Как это .
0 голосов
/ 07 июня 2019

Это выражение довольно интересно, тогда мы добавим правую границу и, скорее всего, начнем с выражения, такого как:

\s'.+?\w'[^']

Демонстрация 1

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

\s'[^']+?\w'[^'] 

Демонстрация 2

или

\s'\w[^']+?\w'[^']

Демо 3

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