正则表达式获取类似 xpath 的字符串中的每个项目,每个下标作为一个组

标签 regex grouping

我想采用类似 xpath 的字符串,例如:

a.b.c[2].d[123].e1[4].f88[5]

并将每个路径部分作为一个匹配项,将每个下标(“数组索引”)作为一个组,如下所示:

match 1: a
match 2: b
match 3: c, group 1: 123
match 4: e1, group 1: 4,
match 5: f88, group 1: 5

我尝试了以下方法(不起作用):

[^.]+(?:\[)*([0-9]+)*(?:\])*

据我了解,这个正则表达式意味着:

  1. 首先,匹配除点以外的所有字符
  2. 然后,检查(但不要捕获)左方括号 - 它可能出现 0 次到无限次。
  3. 然后,检查长度为 1 到无限的任何数字,并作为一个组捕获。
  4. 然后,为右方括号再次执行 2。

但它不起作用。

我怎样才能让它发挥作用?

最佳答案

[^.]+(?:\[)*([0-9]+)*(?:\])*

“但它不起作用” 因为 +贪婪的 并且消耗点。此外,每个下标都是可选的,而不是部分可选的。

应用这些标准,这个表达式确实有效:

([^.\[]+)(?:\[(\d+)\])?

Regex101 Test

关于正则表达式获取类似 xpath 的字符串中的每个项目,每个下标作为一个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69670141/

相关文章:

java - 2 个不同字符串的正则表达式说明可选元素

regex - 正则表达式中第二个捕获组的一部分

vb.net - 使用 Linq 和 VB .NET 进行数据表分组

python - Pandas - 按列分组并将数据转换为 numpy 数组

r - 计算在多个变量上具有特定值的组数

json - JQ:计算每组对象的数量,对于输入的一个子集

regex - 如何将 grep 正则表达式匹配结果保存到变量?

Python提取关键字和括号后的文本

c# - 使用反斜杠作为模式终止符的正则表达式

collections - Silverlight 3 DataGrid 分组 - 检测组标题单击或标题展开/折叠