使用Regex组合分隔数据

使用Regex组合分隔数据,regex,Regex,我试图通过使用regex优化几个应用程序 我们目前使用的是非常糟糕的,我在某种程度上仅限于使用正则表达式进行数据操作 可变水果具有以下值: 苹果香蕉猕猴桃樱桃黄瓜番茄汽车电话 抓住第二次和第五次之间发生的一切_ 例如,苹果、香蕉、猕猴桃、樱桃、黄瓜、西红柿、汽车、电话 结果应该是: 猕猴桃、樱桃、黄瓜 我现在所拥有的是^[a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+_ 这是从字符串中提取数据的最有效方法吗?还有,有没有更好的方法来编写此语句,以

我试图通过使用regex优化几个应用程序

我们目前使用的是非常糟糕的,我在某种程度上仅限于使用正则表达式进行数据操作

可变水果具有以下值: 苹果香蕉猕猴桃樱桃黄瓜番茄汽车电话

抓住第二次和第五次之间发生的一切_

例如,苹果、香蕉、猕猴桃、樱桃、黄瓜、西红柿、汽车、电话

结果应该是:

猕猴桃、樱桃、黄瓜

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


这是从字符串中提取数据的最有效方法吗?还有,有没有更好的方法来编写此语句,以便更易于阅读?

您可以使用此正则表达式并捕获group1的内容

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

?:[^]*{2}-此部分捕获一些仅包含两个下划线的文本。 ?:[^]*.[^{2}[^]*-此部分捕获一些文本,这些文本再次包含只有两个下划线的文本加上一些零个或多个字符,而不是使用[^]*的文本,并停止捕获看起来是第五个下划线的时刻,并在组1中捕获此文本。 从今往后,将为您提供group1中第二个下划线和第五个下划线之间的所有内容

另外,如果您只需要第一个匹配,而不是多个匹配,您可以在正则表达式之前使用start anchor^,并像这样使用它

^(?:[^_]*_){2}((?:[^_]*_){2}[^_]*)
此外,您的正则表达式^[a-zA-Z]+508;[a-zA-Z]+508;[a-zA-Z]+508;[a-zA-Z]+508;也是正确的,但只允许字母表,因此,如果您只想允许下划线之间的字母表,请使用它,否则使用我的正则表达式和我的正则表达式的形式更紧凑,因为它使用的是量词。另外,我的正则表达式将帮助您扩展,比如明天您会说,我想匹配N到Mth下划线之间的所有内容,其中N和M可以是更大的数字,在这种情况下,这个简短的正则表达式将有所帮助