为什么我的正则表达式无法在Python中运行?

时间:2014-02-01 16:49:06

标签: python regex

我想要匹配的是这样的:

public FUNCTION_NAME
FUNCTION_NAME proc near
......

FUNCTION_NAME endp

FUNCTION_NAME可以是:

version_etc
version_etc_arn
version_etc_ar

我的模式是:

pattern = "public\s+" + func_name + "[\s\S]*" + func_name + "\s+endp"

并与:

匹配
match = re.findall(pattern, content)

所以目前我发现如果fuction_name等于version_etc,那么它将匹配 所有的version_etc_arn,version_etc_ar和version_etc .....

表示模式是否为:

“public \ s +”+“version_etc”+“[\ s \ S] *”+“version_etc”+“\ s + endp”

那么它将匹配:

public version_etc_arn
version_etc_arn proc near
......

version_etc_arn endp

public version_etc_ar
version_etc_ar proc near
......

version_etc_ar endp

public version_etc
version_etc proc near
......

version_etc endp

我正试图匹配:

public version_etc
version_etc proc near
......

version_etc endp

我错了吗?有人能给我一些帮助吗?

感谢你!

1 个答案:

答案 0 :(得分:2)

[\s\S]*匹配任何内容的0或更多内容,包括您要排除的_arn。因此,您需要在func_name之后需要一个空格:

pattern = r"(?sm)public\s+{f}\s.*^{f}\s+endp".format(f=func_name)