使用regex查找句子中的标题大小写

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

我正在尝试使用Regex来提取标题中的短语和句子中出现的单词。

到目前为止的努力。

(?:[A-Z][a-z]+\s?)+  

这个Regex代码应用于下面的示例句子时 可以找到那些粗体字。但我需要忽略像This和Whether这样的词(句子开头)。

样例句。

This 是一个 例句 以检查 实际价值 本守则的。无论 行不行 取决于结果。

期待。

这是一个 例句 以检查 实际价值 的这段代码。无论它是否有效 取决于结果。

有用的代码。

import regex as re

text='This is a Sample Sentence to check the Real Value of this code. Whether it works or Not depends upon the result. A State Of The Art Technology is needed to do this work.'
rex=r'(?<!^|[.!?]\ )\b[A-Z][a-z]+(?:\ [A-Z][a-z]+)*\b'

matches = re.finditer(rex,text)
results = [match[0] for match in matches]
print(results)

结果:

['Sample Sentence', 'Real Value', 'Not', 'State Of The Art Technology']
regex regex-group
1个回答
3
投票

假设你的regex风味支持Lookbehinds,我会使用类似这样的代码。

(?<!^|\.\ )\b[A-Z][a-z]+(?:\ [A-Z][a-z]+)*\b

演示.

这将支持那些前面有缩写、标点符号或除了句号(上一句话的结尾)以外的几乎所有单词。


编辑。

根据... 尼克的建议,最好在评论中加上 !? 在Lookbehind中支持以其中任何一个结尾的句子,而不仅仅是句号。

(?<!^|[.!?]\ )\b[A-Z][a-z]+(?:\ [A-Z][a-z]+)*\b

演示.


2
投票

如果您的句子总是单倍行距,您可以使用正向的lookbehind查找字母和空格,以找到标题格式的表达式的开始。

(?<=[a-z,] )(?:[A-Z][a-z]+(?![a-z]).)+

这个regex允许表达式以标点符号结束,而不是仅仅以空格结束(例如. the Final Result.).

regex101的演示

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