Искать слова в верхнем или нижнем регистре и возвращать прописные или строчные - PullRequest
0 голосов
/ 13 января 2019

Мне нужно искать, каждое слово в верхнем или нижнем регистре и результат, чтобы отразить это. Необходимо записать в файл XML.

найти: (?i)(?<!so and so many|.... shallow|hello)\Blo\b

строка helo HELO

заменитель llo или LLO

все, что я получаю, это helllo HELllo

Результат, который я хочу - hello HELLO

Я пытался использовать различные средства для создания условий if ... then ... else, и ни одно из них не сработает.

Редактировать: исправлена ​​замена.

1 Ответ

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

Во-первых, обратите внимание, что шаблоны Boost regex lookbehind должны быть фиксированной длины, ваш текущий делает шаблон недействительным. Вам нужно будет разделить альтернативы на отдельные взгляды.

Далее \B предполагает, что вы хотите сопоставить lo только внутри слова. Таким образом, лучший подход здесь состоит в том, чтобы сопоставить и записать в отдельные группы строчную или заглавную букву, используя группы захвата в положительном взгляде, тогда вы сможете проверить, какая группа соответствует, и применить логику замены по мере необходимости.

Чтобы убедиться, что вы подходите с учетом регистра, вы можете обернуть этот взгляд за собой группой модификаторов регистра, (?-i:...).

Использование

(?i)(?<!your...)(?<!words...)(?<=(?-i:([A-Z])|([a-z])))lo\b
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^

И заменить на (?{1}LO:?{2}lo).

Итак, если буква перед lo строчная, замените ее на lo, если она была заглавной, используйте LO в качестве замены.

enter image description here

...