我有一个文本文件中包含以下文本的字符串:
txt = "java.awt.GridBagLayout.layoutContainer"
我想获取类名 "GridBagLayout"
之前的所有内容。
我尝试了以下代码,但是不知道怎么去掉 "."
。
txt = re.findall(r'java\S?[^A-Z]*', txt)
我得到了下面的结果:"java.awt."
而我想要的是:"java.awt"
你有什么建议可以帮助我解决这个问题吗?
不使用捕获组,你可以使用向前查看((?= ... )
)。
java\s?[^A-Z]*(?=\.[A-Z])
可以捕获你想要的所有内容。下面是它的详细解释:
java //Literal word "java"
\s? //Match for an optional space character. (can change to \s* if there can be multiple)
[^A-Z]* //Any number of non-capital-letter characters
(?=\.[A-Z]) //Look ahead for (but don't add to selection) a literal period and a capital letter.
txt = java.awt
怎么办?你如何使前瞻变成可选项?谢谢! - tommy.carstensen让您的模式匹配一个大写字母后面跟着一个句号:
'(java\S?[^A-Z]*?)\.[A-Z]'
捕获组一中的所有内容都是您想要的。
(java\S?[^A-Z]*?)\.[A-Z]
(想法上 ?
可能不是必要的,但也不会有害 ;)) - Felix Kling使用re.findall()
似乎可以实现您想要的功能:(java\S?[^A-Z]*)\.[A-Z]
txt.rstrip('.')
来删除文本末尾的句号。 - Felix Klingtxt.split('.')[0:2]
代码? - Fredrik Pihl