正则表达式简单多线问题

时间:2011-07-22 15:46:12

标签: python regex

pattern = '^([R][uU][nN])(.*)\((.*)\).'

基本上我要做的就是在表单中的数据中查找过程调用:

RUN proc-name-can-be-anything (input parameters, input, output).

也可以是:

RUN proc-name-long
                  ( 
                    input parameter,
                    other parameter,
                    one_more_just_because 
                  ).

该模式适用于任何单行实例,我需要能够容纳多行并且在我回到python和正则表达式时已经撕掉了我的头发(我知道该模式仅适用于单行那一刻,因为“。”不能是换行符。我真正关心的是我正在查看的过程调用的参数。

由于

2 个答案:

答案 0 :(得分:3)

http://docs.python.org/library/re.html#re.S
http://docs.python.org/library/re.html#re.DOTALL

  

使'.'特殊字符与任何字符匹配,包括换行符

您可以通过在'(?s)'

之前添加模式字符串,将其包含在正则表达式中

另外,不要忘记您可能希望将原始字符串语法与模式字符串一起使用,以防万一。我不认为你的例子会有任何问题,但是将它们用作自我提醒总是一个好主意。

pattern = r'(?s)^([R][uU][nN])(.*)\((.*)\).'这样的东西应该可以解决问题。

答案 1 :(得分:1)

import re

ss = '''RUN proc-name ( input parameter,
                        other parameter,
                        one_more_just_because ).'''

regx = re.compile('^(R[Uu][Nn]) +(.+?) *\((.*?)\)\.',re.MULTILINE|re.DOTALL)

print regx.search(ss).groups()

如果您不想使用re.DOTALL,您也可以这样做:

import re

ss = '''RUN proc-name ( input parameter,
                        other parameter,
                        one_more_just_because ).'''


regx = re.compile('^(R[Uu][Nn]) +(.+?) *\(([\s\S]*?)\)\.',re.MULTILINE)

print regx.search(ss).groups()