首页 > 解决方案 > 正则表达式:在字符之间创建空组,包括之间没有任何内容时

问题描述

我有一个字符串,例如:

EB*C*IND*30***23*50.00*****U

我需要为 * 之间的任何内容创建组。

例如这应该是:

Group 1: C
Group 2: IND
Group 3: 30
Group 4: <empty>
Group 5: <empty>
Group 6: 23
Group 7: 50.00
Group 8: <empty>
Group 9: <empty>
Group 10: <empty>
Group 11: <empty>

我可以得到 Group 0 = EB 和 Group 12 = U 就好了。但我一生都无法弄清楚如何在 * 之间找到那些空组。

我需要查看每个“ ”并说“捕获所有内容直到您到达下一个“ ”,如果下一个字符是“*”,则该组是“空的”。

用例是,这些原始数据被解析为星号之间的所有内容作为其他软件中的组,所以我试图弄清楚如何自己完成它以实现自动化。

(?!\*)([^*]*)(?<!\*)

产生 EB, C, 30, 23, 50.00, U .. 但它不会为空组创建组,因为“。” 正在寻找一个真实的角色。

我如何连续获得 3 个 * 以吐出两个空组?

谢谢。

标签: regexregex-group

解决方案


这是您的问题的一种解决方案。


正则表达式

(?<=\*)[^\*]*(?=\*)
  • (?<=\*)*在左侧寻找 a(?=\*)
  • *在右边寻找
  • [^\*]*寻找介于两者之间的任何东西*

示例 IO

Input: EB*C*IND*30***23*50.00*****U
 
Output:

Match  1: C
Match  2: IND
Match  3: 30
Match  4:   
Match  5:
Match  6: 23
Match  7: 50.00
Match  8:   
Match  9:   
Match 10:   
Match 11:   

测试链接:https ://regex101.com/r/OQLSCY/1


推荐阅读