regex VB.net 正则表达式查找第二个逗号之间的值

hec6srdp  于 2023-01-03  发布在  .NET
关注(0)|答案(1)|浏览(153)

我试着用正则表达式从第二组逗号之间提取值。这组逗号的开头单词中有字母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

寻找的不仅仅是答案,真的很想得到一个解释,这样我就可以从中学习。

wfveoks0

wfveoks01#

您可以在开始时在lookbehind中重复字符类,但在本例中,"value from between the second set of commas"实际上是您正在匹配的当前值左侧的2个逗号。
S是逗号前的最后一个值,由于没有锚点,因此它可以有多个匹配项。

(?<=S,[^,]*,)[^,]+(?=,)

Regex101 demo
如果行仅以大写字符A-Z开头,则在第一部分中至少可以匹配一个S字符

(?<=^[A-RT-Z]*S[A-Z]*,[^,\n]*,)[^,\n]+(?=,)

模式匹配:

  • (?<=正后视,Assert左侧为
  • ^字符串开始
  • [A-RT-Z]*匹配可选字符A-Z,不带S
  • S[A-Z]*匹配S和可选字符A-Z
  • ,[^,\n]*,一个逗号匹配两次
  • )关闭查找
  • [^,\n]+匹配除逗号或换行符以外的1+个字符
  • (?=,)在右侧Assert逗号

Regex101 demo

相关问题