我有一个字符串,它是一个标题和一个常规句子的混合体(没有分隔符将两者分开)
text = "Read more: Indonesia to Get Moderna Vaccines Before the pandemic began, a lot of people were...."
标题实际上以单词Vaccines
结尾,Before the pandemic
是另一个与标题完全分离的句子
如何删除子字符串,直到出现单词?我的想法是删除“阅读更多”一词中的所有单词,然后删除以大写字母开头的所有单词,直到一个单词之前(before
)。但我不知道如果它遇到了连词或介词,而这些连词或介词在标题中不需要大写,比如单词the
,该怎么办
我知道有一个函数title()
可以在Python中将字符串转换为标题格式,但是有没有任何函数可以检测子字符串是否是标题
我使用正则表达式尝试了以下方法
import re
text = "Read more: Indonesia to Get Moderna Vaccines Before the pandemic began, a lot of people were...."
res = re.sub(r"\s*[A-Z]\s*", " ", text)
res
但它只是删除了所有以大写字母开头的单词
你为什么不直接用切片呢
您可以通过匹配一系列大写单词和words that can be non-capitalized in titles来匹配标题
见regex demo
详细信息:
^
-字符串的开头(?:Read\s+more\s*:)?
-可选的非捕获组匹配Read
、一个或多个空格、more
、零个或多个空格和:
\s*
-零个或多个空格(?:(?:[A-Z]\S*|the|an?|[io]n|at|with(?:out)?|from|for|and|but|n?or|yet|[st]o|around|by|after|along|from|of)\s+)*
-零个或多个(?:[A-Z]\S*|the|an?|[io]n|at|with(?:out)?|from|for|and|but|n?or|yet|[st]o|around|by|after|along|from|of)
-一个大写的单词,可能包含任何非空白字符或在英文标题中可以保持非大写的单词之一\s+
-一个或多个空格(?=[A-Z])
-后跟大写字母李>注意:您提到您的语言不是英语,所以
^(?:Read\s+more\s*:)?\s*(?:(?:[A-Z]\S*|the|an?|[io]n|at|with(?:out)?|from|for|and|but|n?or|yet|[st]o|around|by|after|along|from|of
[A-Z]
替换为\p{Lu}
以匹配任何Unicode大写字母,将\S*
替换为\p{L}*
以匹配任何零个或多个Unicode字母,但请确保使用PyPi正则表达式库,因为Python内置的re
不支持Unicode类别李>相关问题 更多 >
编程相关推荐