使用正则表达式匹配到某个模式

时间:2011-07-11 21:01:37

标签: python regex

我在包含一些文本的文本文件中有字符串,如下所示:

txt = "java.awt.GridBagLayout.layoutContainer"

我希望在类名"GridBagLayout"之前获取所有内容。

我尝试过以下内容,但我无法弄清楚如何摆脱"."

txt = re.findall(r'java\S?[^A-Z]*', txt)

我得到以下内容:"java.awt."

而不是我想要的:"java.awt"

关于我如何解决这个问题的任何指示?

3 个答案:

答案 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]