在句子中找到大写的O,但在句首没有找到。

问题描述 投票:0回答:1

我需要更换大写字母 O 句内,但应保持 O 在句子的开头。

所以,我只需要找到并匹配孤独的 O 句中。

例如:

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

OObjects 是正确的大写开头的句子。还应注意与行首本身不匹配。第二种 O 在'O类'中,应该是数字ZERO。0 意思是数量。 我需要的regex就是匹配那个。

我知道如何匹配任何O,但它也会匹配第一个。有什么线索吗?

regex
1个回答
2
投票

只是为了扩展 Tibrogargan的评论你可以识别这样的情况。

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)

正则组

这使用了 两类签名: 冷眼旁观积极的前瞻&积极的后顾之忧. 这些都被称为 围观组 因为它们允许您评估主字符串两边的字符,而不会成为匹配本身的一部分。

在负向查找的情况下,如果包含在 (?<!VALUES_HERE) 在括号外的表达式前发现有反斜杠,将拒绝匹配。

表达式中的反斜杠 \. 是用于转义句号,因为句号是RegEx语法的一部分。句号是RegEx语法的一部分。\s 代表一个whitespace,但下面的括号是量化符,指定表达式将识别1到2个whitespace的实例。

而对于正向的lookahead和lookbehind,如果lookahead形式所包含的表达式为 (?=VALUES_HERE) 或者说背后的形式 (?<=VALUES_HERE) 匹配 表达式之前或之后(分别),那么它将只返回主表达式,而不是lookahead或lookbehind。

为什么要这样写呢?

这样写的话,这个表达式会抛出所有在 "O "之前有一个或两个空格的句号的匹配。它最多寻找两个空格,因为我们知道这里的输入来自 OCR,它可能偶尔会错误地表示一个空格。

如果关键词是一个专有名词,这个表达方式就会更难组成,因为这个词会在整个句子中继续出现,并大写,而这里的情况并非如此。

它只接受任何两边都有一个空格的 "O "作为匹配,防止意外匹配以大写 "O "开头的单词。

请看 活字印刷 在RegExr上。

进一步阅读

© www.soinside.com 2019 - 2024. All rights reserved.