使用正则表达式合并定界数据

时间:2019-03-27 14:49:54

标签: regex

我正在尝试使用正则表达式优化几个应用程序。

我们目前使用的是绝对可怕的,我在某种程度上仅限于使用正则表达式进行数据操作。

变量fruits具有以下值: apple_banana_kiwi_cherry_cucumber_tomato_car_telephone

抓住_第2次到第5次之间的所有事件

例如,对于apple_banana_kiwi_cherry_cucumber_tomato_car_telephone

结果应该是:

kiwi_cherry_cucumber

我现在拥有的是^[a-zA-Z]+_[a-zA-Z]+_([a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+)_

这是从字符串中提取数据的最有效方法吗?另外,有一种更好的方式编写此语句,这样更易​​于阅读吗?

1 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式捕获组1的内容,

(?:[^_]*_){2}((?:[^_]*_){2}[^_]*)

Demo

说明:

  • (?:[^_]*_){2}-此部分捕获了一些仅包含两个下划线的文本。
  • ((?:[^_]*_){2}[^_]*)-该部分使用_捕获某些文本,该文本再次包含一些文本,这些文本仅包含两个下划线,另外还有一些文本,除了[^_]*以外的其他零个或多个字符,并停止捕获该时刻似乎是第五个下划线,并在group1中捕获了此文本。

此后,您将在第1组的第二个下划线和第五个下划线之间找到所有内容。

此外,如果您只希望仅进行第一个匹配而不是多个匹配,则可以在正则表达式之前使用起始锚^并像这样使用它,

^(?:[^_]*_){2}((?:[^_]*_){2}[^_]*)

Demo with first match only

此外,您的正则表达式^[a-zA-Z]+_[a-zA-Z]+_([a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+)_也是正确的,但仅允许使用字母,因此,如果您只想在下划线之间允许使用字母,则可以使用它,否则使用我的正则表达式,我的正则表达式会比较紧凑使用量词。另外,我的正则表达式将帮助您扩展,以防万一,例如明天您说,我想将NMth下划线的所有内容匹配到NM下划线数字,在这种情况下,这种简短的正则表达式将有所帮助。