我在包含一些文本的文本文件中有字符串,如下所示:
txt = "java.awt.GridBagLayout.layoutContainer"
我希望在类名"GridBagLayout"
之前获取所有内容。
我尝试过以下内容,但我无法弄清楚如何摆脱"."
txt = re.findall(r'java\S?[^A-Z]*', txt)
我得到以下内容:"java.awt."
而不是我想要的:"java.awt"
关于我如何解决这个问题的任何指示?
答案 0 :(得分:13)
不使用捕获组,您可以使用前瞻((?= ... )
业务)。
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.
答案 1 :(得分:0)
使您的模式匹配句点后跟大写字母:
'(java\S?[^A-Z]*?)\.[A-Z]'
捕获组中的所有内容都将是您想要的。
答案 2 :(得分:0)
这似乎可以通过re.findall()
执行您想要的操作:(java\S?[^A-Z]*)\.[A-Z]