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

VB.net regex find value between second commas

提问人:user3786542 提问时间:1/1/2023 更新时间:1/2/2023 访问量:42

问:

我正在尝试使用正则表达式从第二组逗号之间提取值。这在开头的单词中有字母 S。

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

以上是我能得到的最接近的。它将提供我在 BS 和 CS 线路上寻找的价值。我以为后面的 [^'] 会得到(排除)第一组逗号之间的所有字符。

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

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

正则表达式 vb.net

评论


答:

2赞 The fourth bird 1/1/2023 #1

您可以在开头的 lookbehind 中重复字符类,但在这种情况下,“第二组逗号之间的值”实际上是您匹配的当前值左侧的 2 个逗号。

S 是逗号前的最后一个值,由于没有锚点,它可以有多个匹配项。

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

Regex101 演示

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

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

该模式匹配:

  • (?<=正面向后看,断言向左是
    • ^字符串的开头
    • [A-RT-Z]*匹配不带 S 的可选字符 A-Z
    • S[A-Z]*匹配 S 和可选字符 A-Z
    • ,[^,\n]*,匹配逗号的 2 次
  • )关闭外观
  • [^,\n]+匹配逗号或换行符以外的 1+ 个字符
  • (?=,)在右侧断言逗号

Regex101 演示

评论

0赞 user3786542 1/2/2023
谢谢。使用 regex101 进行测试时遇到问题。我以为我需要我们 *,但 regex101 给出了一个错误“* 后视内部的量词使其宽度不固定”您指向 regex101 的链接有效,但尝试您在我拥有的版本中提供的示例不起作用。不知道为什么
0赞 The fourth bird 1/2/2023
@user3786542 vb.net 使用必须在 regex101 上的 flavor 下选择的 .NET 引擎。