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
我需要的是“**”
我已经花了几个小时在这上面,但仍然没有线索,希望有人能帮我。试试:
这是我能想到的最普遍的模式
相配
(?:^ |)
:行首或前导空格[^-]*?
:除“”或“-”之外的任何字符匹配次数尽可能少(\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