C# 正则表达式字母数字逗号分隔无限次

C# 正则表达式字母数字逗号分隔无限次,c#,regex,C#,Regex,我已经设法把这个拼凑起来了 ^([a-zA-Z0-9]+,?\s*)+$ 将匹配以下内容 Prek,1,12,3,4,--警告可能有空格(防弹) 但是,它将逗号作为字符串的一部分。我不明白如何使逗号不包含在捕获中。我试着用()和extra[]以不同的方式移动它,但并没有得到我喜欢的结果 我知道很多人会说只使用split,然而,我正在做一个自动化的ETL,我已经为基于状态的通用场景设置了正则表达式。所以我试图避免这种情况。如果是那种状态,那么就这样做。并且只想通过表达式循环匹配并处理它们。一个可能

我已经设法把这个拼凑起来了 ^([a-zA-Z0-9]+,?\s*)+$

将匹配以下内容 Prek,1,12,3,4,--警告可能有空格(防弹)

但是,它将逗号作为字符串的一部分。我不明白如何使逗号不包含在捕获中。我试着用()和extra[]以不同的方式移动它,但并没有得到我喜欢的结果


我知道很多人会说只使用split,然而,我正在做一个自动化的ETL,我已经为基于状态的通用场景设置了正则表达式。所以我试图避免这种情况。如果是那种状态,那么就这样做。并且只想通过表达式循环匹配并处理它们。

一个可能适合您需要的通用正则表达式模式是:

[A-Za-z0-9]+(?:\s*,\s*[A-Za-z0-9]+)*
说明:

[A-Za-z0-9]+初始字母数字术语
(?:(打开非捕获组)
\s*可选空格
,逗号分隔符
\s*更多可选空格
[A-Za-z0-9]+另一个字母数字术语
)*零次或多次(关闭非捕获组)

如果您不想使用split,可以使用
\G
锚来获取连续匹配,在逗号字符和可选空格字符之间进行捕获

\G([a-zA-Z0-9]+)(?:\s*,\s*|$)
解释

  • \G
    在上一个匹配的末尾断言位置,在本例中是在开始处
  • ([a-zA-Z0-9]+)
    捕获组1,匹配字符类中的任意字符1+次
  • (?:\s*,\s*|$)
    在可选空白字符之间匹配逗号或断言字符串的结尾


“但是,它包含逗号作为字符串的一部分”-请解释您的意思。检索分组时,它包含字母数字值后的。感谢您的响应,这不起作用,但如果您查看提供的屏幕截图,您会发现它与prek不匹配,它将prek与prek组合在一起, 1@Angela我已经更新了答案,也在第一组中获得了Prek。非常感谢!非常感谢你的解释!