我需要更换大写字母 O
句内,但应保持 O
在句子的开头。
所以,我只需要找到并匹配孤独的 O
句中。
例如:
OOP is a programing concept. Objects are instances Of O classes
↑ ↑
corect replace
该 O
在 Objects
是正确的大写开头的句子。还应注意与行首本身不匹配。第二种 O
在'O类'中,应该是数字ZERO。0
意思是数量。 我需要的regex就是匹配那个。
我知道如何匹配任何O,但它也会匹配第一个。有什么线索吗?
只是为了扩展 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上。
进一步阅读