gpt4 book ai didi

两个第 n 个位置字符之间的正则表达式

转载 作者:行者123 更新时间:2023-12-02 04:46:01 24 4
gpt4 key购买 nike

我正在尝试从位于两个字符 (_) 之间但可能是第 n 个位置的单词的文本字符串中获取一些数据。

目前我有以下内容

!((?:.*?(_)){2})_(.+?)$

处理以下数据

D20_Mbps_U10_Mbps_TC4_P

我希望得到的地方

U10

但在第一部分捕获时什么也得不到

D20_Mbps_

因此没有留下任何东西给第二部分捕捉

我试过了

_\s*(.*?)(?=\s*_)

但这只会让我第一次出现我需要它成为第 n 个位置的地方。我可以在运行时提供 n 的地方。

有什么想法吗?

谢谢

最佳答案

让我尝试详细回答这个问题。

当您想要匹配分隔字符串中第 N 次出现的子字符串时,您真的应该考虑一些 String.Split 函数。在您的情况下,使用 _ 拆分并获取所需的值是一项微不足道的任务。

现在,当您无法使用编程手段提取该值时,您只能使用限制量词、分组和捕获(在 Java 和 .NET 中,可以实现即使没有捕捉也一样)。

因此,主要思想是匹配分隔符以外的 0 个或多个字符,然后匹配分隔符本身,然后重复相同 N-1 次。然后,再次匹配定界符并捕获后面的非定界符字符。

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

参见 demo .第 1 组将包含 U10

another variation :

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

这会将第 3 个 _ 分隔的元素捕获到第 1 组中。在这种情况下,第 2 组是第 4 个以上的元素,字符串的其余部分直到末尾。

请注意,在某些正则表达式风格中,{( 必须转义(vim、非 EGREP 版本的 sed 等)。

关于两个第 n 个位置字符之间的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32755703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com