【发布时间】:2022-11-18 00:35:38
【问题描述】:
String s = #Section250342,Main,First/HS/12345/Jack/M,200010 10.00 200011 -2.00,
#Section250322,Main,First/HS/12345/Aaron/N,200010 17.00,
#Section250399,Main,First/HS/12345/Jimmy/N,200010 12.00,
#Section251234,Main,First/HS/12345/Jack/M,200011 11.00
无论在 3 字符串中有单词 /Jack/M 的什么地方,我都想每次使用正则表达式提取与其关联的节号(250342、251234)、日期(200010、200011)和值(10.00、11.00、-2.00) . Sometines 一行可以包含一个或两个值,这样正则表达式就有点混乱了。所以在一天结束时,我们将要提取 3 个差异组。
我试过了
#Section(\d+)(?:(?!#Section\d).)*\bJack/M,(\d+)\h+(\d+(?:\.\d+)?)\s(\d+)\h+([-+]?\d+(?:\.\d+)?)\b
在这里看到它的实际效果 - https://regex101.com/r/JaKeGg/1,它带来了 5 个组而不是 3 个,当这里只有一个值时它似乎不匹配所以我需要帮助。
【问题讨论】:
-
您是否考虑过使用替代品?像这样:regex101.com/r/6Votk8/1 并只是连接或仅使用您想要的
$1?可能会成功。 -
如果你有这个字符串
200010 10.00 200011你不能在一个组中得到 200010 和 200011 -
@sniperd 问题是 #Section251234,Main,First/HS/12345/Jack/M,200011 11.00 这条线没有被正则表达式识别,尽管它应该被正则表达式识别,因为它没有 $4 和 $5 替换
-
如果我可以使用过滤器@Thefourthbird 做到这一点,是否有可能