我试着用正则表达式从第二组逗号之间提取值。这组逗号的开头单词中有字母S。
(?<=S,[^,],)[^,]+(?=,)
以上是我能得到的最接近的值。它将给予我在BS和CS行上寻找的值。我想在lookbehind中的[^']将得到(排除)第一组逗号之间的所有字符。
BB,21,1.750000,0.000000,
AS,21.5,3.250000,-0.187500
BS,21,3.250000,-0.187500
CS, ,1.750000,-0.375000
DS,1,30.375000,-0.375000
QA,aa,30.375000,-0.375000
寻找的不仅仅是答案,真的很想得到一个解释,这样我就可以从中学习。
1条答案
按热度按时间wfveoks01#
您可以在开始时在lookbehind中重复字符类,但在本例中,"value from between the second set of commas"实际上是您正在匹配的当前值左侧的2个逗号。
S是逗号前的最后一个值,由于没有锚点,因此它可以有多个匹配项。
Regex101 demo
如果行仅以大写字符A-Z开头,则在第一部分中至少可以匹配一个S字符
模式匹配:
(?<=
正后视,Assert左侧为^
字符串开始[A-RT-Z]*
匹配可选字符A-Z,不带SS[A-Z]*
匹配S和可选字符A-Z,[^,\n]*,
一个逗号匹配两次)
关闭查找[^,\n]+
匹配除逗号或换行符以外的1+个字符(?=,)
在右侧Assert逗号Regex101 demo