0

如何创建一个可以匹配行首以及以下所有以制表符开头的行的正则表达式?例如

not keyword ;
    not this line ;
keyword and random text ;
    this line ;
    this line ;
    and this line ;
not keyword ;

我希望能够从 '^keyword' 开始匹配到 'and this line ;'

谢谢你。

编辑。我正在尝试为我不需要的节点删除 Maya 的 MEL 代码。实际代码如下所示,带有多行带有制表符缩进的 setAttr。

createNode mentalrayOptions ......... ;
    setAttr .............. ; 

我将整个文本加载到 1 个变量中

with open( 'path/to/file', 'r') as content_file:
    content = content_file.read()

我尝试的正则表达式似乎正确地找到了起点,但我无法正确地找到终点。它要么匹配 1 行,根本不匹配任何内容,要么匹配到文件末尾。

match = re.search( r'(^createNode mentalrayOptions)(.*\n)(^\t)' ,content, flags=re.DOTALL)
4

1 回答 1

3

你可以使用这样的东西:

^keyword.*(?:\n^\t.*)*

标志:

  • m对于多线,所以^有效。
  • 不是s这样.不匹配换行符。

解释:

  • ^keyword- 开始与keyword
  • .*- 匹配到行尾
  • (?:\n^\t.*)*- 其中每一个都匹配以制表符开头的另一行。请注意,我们要匹配换行符,因此请注意是否有其他行分隔符。

工作示例:http ://www.regex101.com/r/jP8yH0

自然,如果您尝试匹配真实的代码块,这可能会很快失败 - 例如通过注释或字符串文字。

于 2013-10-10T06:18:12.810 回答