Python正则表达式以#tag标签

时间:2015-08-06 21:21:19

标签: python regex

我有一个文本块,如:

# <init> (Lorg/cyanogenmod/audiofx/ActivityMusic;)V
         , 0 iput-object v1, v0, Lorg/cyanogenmod/audiofx/ActivityMusic$11;->this$0 Lorg/cyanogenmod/audiofx/ActivityMusic;
         , 4 invoke-direct v0, Ljava/lang/Object;-><init>()V
         , a return-void 

我想在Python中使用reg-exp,只选择第一行

# <init> (Lorg/cyanogenmod/audiofx/ActivityMusic;)V

这可能吗?谢谢!

1 个答案:

答案 0 :(得分:1)

只需换行换行并获取第一个元素:

test_str = "# <init> (Lorg/cyanogenmod/audiofx/ActivityMusic;)V\n         , 0 iput-object v1, v0, Lorg/cyanogenmod/audiofx/ActivityMusic$11;->this$0 Lorg/cyanogenmod/audiofx/ActivityMusic;\n         , 4 invoke-direct v0, Ljava/lang/Object;-><init>()V\n         , a return-void "
print(test_str.split('\n')[0])

请参阅demo

输出:# <init> (Lorg/cyanogenmod/audiofx/ActivityMusic;)V

如果不是第一行:

A non-regex way

test_str = "some string\n# <init> (Lorg/cyanogenmod/audiofx/ActivityMusic;)V\n         , 0 iput-object v1, v0, Lorg/cyanogenmod/audiofx/ActivityMusic$11;->this$0 Lorg/cyanogenmod/audiofx/ActivityMusic;\n         , 4 invoke-direct v0, Ljava/lang/Object;-><init>()V\n         , a return-void\n# <init> (Lorg/cyanogenmod/audiofx/ActivityMusic;)V "
ss = test_str.split('\n')
for s in ss:
    if s.strip()[0] == "#":
        print s
        break

对于正则表达式方式,see this

p = re.compile(r'^#.*', re.M)
print p.search(test_str).group()

正则表达式方法的要点是

  • 使用re.M多行标记
  • 使用只返回1个匹配对象的re.search
  • #必须是第一个字符(或添加\s* - 可选空格),以便可以匹配以它开头的行。