从字符串中挑选出最多一个字符的字符

时间:2018-11-08 01:07:20

标签: regex

这是我的数据

  

ABCD01MAH_processor_B_stats_qwer_20181105T105946Z.csv ABCD01MAH_processor_B_stats_qwer_20181106T105945Z.csv EFGHIJ01MAH_processor_A_stats_qwer_20181105T105945Z.csv EFGHIJ01MAH_wer_105_p

我想挑出所有东西,直到第一个underscore

我该怎么做?

这是我的尝试,使用先行条件(?(?=...)yes|no),但直到最后一个underscore为止
例如(?<name1>\w+(?=_))
https://regex101.com/r/qJ2fL6/1
为了让它收集所有到第一个underscore的内容 我必须执行以下操作。
(?<name1>\w+(?=_p)) 可以满足我的需求,我得到以下信息:

  

ABCD01MAH   ABCD01MAH   EFGHIJ01MAH   EFGHIJ01MAH   但是我使用对吗?

在一般情况下,如何获得第一个undrscore的角色? 如何获得角色,更一般地说,如何获得第2 undrscore? 如何获得角色,更一般地,如何获得第3 undrscore?

我想要的例子:
1st

  

ABCD01MAH


第二个

  

ABCD01MAH_processor


3rd

  

EFGHIJ01MAH_processor_A

1 个答案:

答案 0 :(得分:1)

对于第一部分,我们可以尝试使用:

^(.*?)(?=_|$).*$

第一个捕获组将包含第一个路径。对于包含第二条路径的最多一条,我们可以使用:

^(.*?_.*?)(?=_|$).*$

更一般而言,适用于第N个词,包括第N个词:

^(.*?(?:_.*?){N-1})(?=_|$).*$

因此,对于N-1 = 3这四个术语,我们可以使用:

^(.*?(?:_.*?){3})(?=_|$).*$

Demo