使用正则表达式来分割这些单词

时间:2018-04-13 07:02:50

标签: java regex

如何使用正则表达式获取我需要的信息。

实施例

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。

我需要的是'**'

我花了好几个小时,但仍然没有任何线索,将会感谢有人可以帮助我。

4 个答案:

答案 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)?)(?=-)

是我能想到的最普遍的模式 匹配

  1. gb_reg_test2 -2I_114.dexl.gz, gb_bk_test1 _P01-2I_114.dexl.gz
  2. aa_aSD_asdsa -qwwe.ddf_sdfsdf_asdf-作为
  3. 123_3d3_22 -adsfasdf.gz
  4. AA1?〜²³² -23423
  5. asdfas_sdfsd _P01-sadfdefwe.gz
  6. 说明:

    1. (?:^| ):行或前导空格的开头
    2. [^ -]*?:任何字符,但“或” - “匹配的次数越少
    3. (_P01)?“_ P01”作为可选元素,匹配(如果存在)
    4. (?=-):紧跟-
    5. 您想要的项目是第一个捕获的组

答案 3 :(得分:0)

(\w*?)(_P\d+|)-\d+I_\d+.dexl.gz

已经解决了。感谢Veselin Davidov的回答。谢谢大家的帮助。真的很感激。