Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式拆分这些单词_Java_Regex - Fatal编程技术网

Java 使用正则表达式拆分这些单词

Java 使用正则表达式拆分这些单词,java,regex,Java,Regex,如何使用正则表达式获取我需要的信息 示例: 期望: gb_reg_test2, gb_bk_test1, aa_bb_cc 一般情况: 注释:“**”可以是任何单词。例如aa_bb、aa_vv_cc、aa_bb_ccc_ddd_ee、aa 我需要的是“**” 我已经花了几个小时在这上面,但仍然没有线索,希望有人能帮我。试试: 这是我能想到的最普遍的模式 相配 gb\u reg\u test2-2I\u 114.dexl.gz,gb\u bk\u test1\u P01-2I\u 114.dex

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

示例:

期望:

gb_reg_test2, gb_bk_test1, aa_bb_cc
一般情况:

注释:“**”可以是任何单词。例如aa_bb、aa_vv_cc、aa_bb_ccc_ddd_ee、aa

我需要的是“**”

我已经花了几个小时在这上面,但仍然没有线索,希望有人能帮我。

试试:

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

  • gb\u reg\u test2-2I\u 114.dexl.gz,gb\u bk\u test1\u P01-2I\u 114.dexl.gz
  • aa_aSD_asdsa-qwwe.ddf_sdfsdf_asdf-as
  • 123_3d3_22-adsfasdf.gz
  • aA1?~23423
  • asdfas\u sdfsd\u P01-sadfdefwe.gz
  • 说明:

  • (?:^ |)
    :行首或前导空格
  • [^-]*?
    :除“”或“-”之外的任何字符匹配次数尽可能少
  • (\u P01)?
    “\u P01”作为可选元素,如果存在则匹配
  • (?=-)
    :后跟
    -

  • 您想要的项目是第一个捕获的组

    您的问题是预期结果的规则不明确。您声明,
    **-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+|)或任何您需要的模式

    这里可以看到一个工作示例:


    已经解决了。谢谢维塞林·大卫杜夫的回答。谢谢大家的帮助。非常感谢

    请尝试thx获取评论。这个表达太具体了。”gb_reg_test2'可以是任何字符。例如aaa_bb_cc、aa_dd。。。。对于这些情况,您的表达式将不起作用。所以您说aa-2I中的aa是可以的,aa-u中的aa-P01-2I是可以的,但P01-2I中的P01不是(现在)?请明确说明您需要什么。您知道这两个场景与您编写它们的方式重叠吗?既然它对应于模式**-2I_114.dexl.gz,**可以是任何单词,为什么不使用gb_bk_test1_P01作为正确答案呢。在这种情况下,我怎么能得到单词\u P01?是的,但规则是什么?当P01是可选字符时,结果的一部分是什么?您的规则不清楚,这就是为什么您不能编写正则表达式的原因。如果这种模式更通用的话。如果示例为aa_bb_ccc-2I_114.dexl.gz,则aa_dd_P01-2I_114.dexl.gz
    **-2I_114.dexl.gz, **_P01-2I_114.dexl.gz
    
    gb_(reg|bk)_test\d
    
    (?:^| )([^ -]*?(_P01)?)(?=-)
    
    (\w*?)(_P01|)-2I_114.dexl.gz -> Group 1 here is the string you want
    
    (\w*?)(_P\d+|)-\d+I_\d+.dexl.gz