【问题标题】:Python Regex starting with hashtag以 hashtag 开头的 Python 正则表达式
【发布时间】:2015-10-30 04:59:00
【问题描述】:

我有一段文字,例如:

# <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 中的正则表达式,它只选择第一行

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

这可能吗?谢谢!

【问题讨论】:

标签: python regex


【解决方案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

输出:# &lt;init&gt; (Lorg/cyanogenmod/audiofx/ActivityMusic;)V

如果不是第一行:

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

【讨论】:

  • 如果不是第一行怎么办?
  • 我是一个乐于助人的好心人,但在发布了一个真正有效的答案后几秒钟就投下了反对票……我开始失去信心。
  • 我认为 dv 很可能是因为这个人不喜欢这个问题,而不是不喜欢你的回答。
  • 这是常见的不良做法:我不喜欢这个问题,我会伤害那些帮助的人。
  • 我抵消了dv,我个人不会太担心。
猜你喜欢
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2014-11-13
  • 1970-01-01
  • 2020-05-07
相关资源
最近更新 更多