Найдите заглавную букву O внутри предложения, но не в начале - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно заменить прописные буквы O внутри предложений, но в начале предложения следует оставить O.

Поэтому мне нужно найти и сопоставить только одиночные O внутри предложений.

Например:

OOP is a programing concept. Objects are instances Of O classes
                             ↑                        ↑
                           corect                   replace

O в Objects правильно написано заглавными буквами начиная предложение. Следует также позаботиться о том, чтобы не совпало начало строки. Второй O в «O классах» должен быть числом ZERO 0, означающим количество. Регулярное выражение мне нужно, чтобы соответствовать этому.

Я знаю, как сопоставить любое О, но оно также будет соответствовать первому. Любые подсказки?

1 Ответ

2 голосов
/ 22 апреля 2020

Просто чтобы расширить комментарий Тиброгаргана , вы можете определить такие случаи:

let input = "OOP is a programing concept. Objects are instances Of O classes"
let regex = /((?<!\.\s{1,2})(?<=\s)O(?=\s))/g
let output = input.replace(regex,'0')

console.log(output)

RegExp Groups

При этом используется два типа групп : негативный вид сзади и позитивный взгляд и позитивный взгляд . Их целесообразно называть группами обхода , поскольку они позволяют оценивать символы по обе стороны от основной строки, не становясь частью совпадения.

С отрицательным взглядом сзади, если значения, содержащиеся в (?<!VALUES_HERE), найденные до следующего выражения вне скобок, будут отклонять совпадение.

Backsla sh в выражении \. предназначено для экранирования периода, поскольку точки являются частью синтаксиса RegEx. \s представляет один пробел, но следующие квадратные скобки являются квантификаторами, которые указывают, что выражение будет распознавать от 1 до 2 экземпляров пробела.

Принимая во внимание, что с положительным предвидением и lookbehind, если выражение, содержащееся в предпросмотре form (?=VALUES_HERE) или lookbehind form (?<=VALUES_HERE) match и выражения до или после (соответственно), тогда оно будет возвращать только основное выражение, а не lookahead или lookbehind.

Почему так?

Написанное так, выражение выбрасывает все совпадения, которые имеют точку с пробелом или два перед «О». Он ищет до двух пробелов, потому что мы знаем, что здесь вводится OCR, который иногда может искажать один пробел.

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

Он будет принимать в качестве совпадения любое «O», которое имеет один пробел с обеих сторон, предотвращая случайное совпадение слов, которые начинаются с большой буквы "O".

См. живое выражение на RegExr.

Дополнительная литература

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