如何使用正则表达式获取我需要的信息。
实施例
gb_reg_test2-2I_114.dexl.gz, gb_bk_test1_P01-2I_114.dexl.gz, aa_bb_cc-2I_114.dexl.gz
期待:
gb_reg_test2, gb_bk_test1, aa_bb_cc
一般案例:
**-2I_114.dexl.gz, **_P01-2I_114.dexl.gz
评论:'**'可以是任何单词。例如aa_bb,aa_vv_cc,aa_bbb_ccc_ddd_ee,aa。
我需要的是'**'
我花了好几个小时,但仍然没有任何线索,将会感谢有人可以帮助我。
答案 0 :(得分:2)
尝试this pattern:
gb_(reg|bk)_test\d
答案 1 :(得分:2)
您的问题的一个问题是预期结果的规则不明确。您声明**-2I_114.dexl.gz
是匹配模式,**可以是任何东西。在这种情况下,例如:
gb_bk_test1_P01-2I_114.dexl.gz
我们可以有两个有效的结果:
gb_bk_test1和gb_bk_test1_P01 - 您需要定义一个规则,该规则可以决定哪一个是正确的规则。如果我们假设规则没有_P01(作为硬编码字符串,因为我们不知道该任务的其他任何内容),请从您的帖子中获取。然后一个适合你的regext就是那个:
(\w*?)(_P01|)-2I_114.dexl.gz -> Group 1 here is the string you want
此外,您可以修改第二部分以添加从常规模式中排除的其他模式 - 例如(_P01 | _P06 |)或(_P \ d + |)或您需要的任何模式
这里可以看到一个工作示例: Regex tester
答案 2 :(得分:0)
(?:^| )([^ -]*?(_P01)?)(?=-)
是我能想到的最普遍的模式 匹配
说明:
(?:^| )
:行或前导空格的开头[^ -]*?
:任何字符,但“或” - “匹配的次数越少(_P01)?
“_ P01”作为可选元素,匹配(如果存在)(?=-)
:紧跟-
您想要的项目是第一个捕获的组
答案 3 :(得分:0)
(\w*?)(_P\d+|)-\d+I_\d+.dexl.gz
已经解决了。感谢Veselin Davidov的回答。谢谢大家的帮助。真的很感激。