C# 扩展[^,]和#x2B;,C语言中的正则表达式# 复制品

C# 扩展[^,]和#x2B;,C语言中的正则表达式# 复制品,c#,regex,csv,C#,Regex,Csv,我正在寻找一个正则表达式来解析CSV值,我遇到了这个正则表达式 [^,]+ 我的工作就是把每一个“,”的单词分开。我想知道的是说我有绳子 值名称v1、v2、v3、v4、 现在我需要一个正则表达式来找到单词v1,v2,v3,v4 我试过-> ^value_name\s+([^,]+)* 但这对我不起作用。你能告诉我我做错了什么吗?我记得我在研究正则表达式及其状态机实现。它不是以同样的方式工作吗 如果字符串以Value_name开头,后跟一个或多个空格。去下一个州。在那种状态下,读一个单词直到一

我正在寻找一个正则表达式来解析CSV值,我遇到了这个正则表达式

[^,]+
我的工作就是把每一个“,”的单词分开。我想知道的是说我有绳子

值名称v1、v2、v3、v4、

现在我需要一个正则表达式来找到单词v1,v2,v3,v4

我试过->

^value_name\s+([^,]+)*
但这对我不起作用。你能告诉我我做错了什么吗?我记得我在研究正则表达式及其状态机实现。它不是以同样的方式工作吗

如果字符串以Value_name开头,后跟一个或多个空格。去下一个州。在那种状态下,读一个单词直到一个单词出现。然后再做一次!每个单词都将被分组


我理解错了吗?

我希望它只在组中得到v1,因为第一个逗号“阻止”它获取其余字段。如何处理这个问题将取决于正则表达式上使用的方法,但可能需要进行两次传递,首先获取所有用逗号分隔的字段,然后在空格上拆分。也许是
^value\u name\s+(?:([^,]+),?)*

哦,是的,列表

/(?:^value\u name\s+|,\s*)([^,]+)/g
将从理论上获取它们,但您必须在循环中使用
RegExp.exec()
来获取捕获,而不是整个匹配

我希望预赛能在JS:(


否则,按照Logan的想法:
/^value\u name\s+([^,]+(?:,\s*[^,]+)*)$/
后跟.split(/,\s*/);

您可以使用类似于建议的正则表达式:

(?:^value_name\s+)?([^,]+)(?:\s*,\s*)?
  • 第一组是非捕获组,它将匹配行的开头和
    值\u名称

    为了确保正则表达式在所有匹配中仍然有效,我们通过使用
    “?”
    modified(表示最多匹配一次)使该组成为可选的

  • 第二组正在捕获并将匹配您的
    vXX
    数据

  • 第三组是非捕获组,将与
    及其前后的任何空格相匹配。
    同样,我们通过使用
    '?'
    修饰符使其成为可选的,否则最后一个
    'vXX'
    组将不匹配,除非我们用最后一个
    ',
    结束字符串

在您的测试中,正则表达式不会匹配多次:您必须记住,如果希望正则表达式匹配字符串中的多个匹配项,则整个正则表达式需要匹配字符串中的每个匹配项,因此您必须构建正则表达式,不仅要匹配字符串
“value\u name”
的开头,还要匹配每个出现的项其中的
'vXX'
的ce

在C#中,您可以使用如下代码列出所有匹配项和组:

Regex r = new Regex(@"(?:^value_name\s+)?([^,]+)(?:\s*,\s*)?");
Match m = r.Match(subjectString);
while (m.Success) {
    for (int i = 1; i < m.Groups.Count; i++) {
        Group g = m.Groups[i];
        if (g.Success) {
            // matched text: g.Value
            // match start: g.Index
            // match length: g.Length
        } 
    }
    m = m.NextMatch();
} 
Regex r=newregex(@“(?:^value\u name\s+)([^,]+)(?:\s*,\s*)?”;
匹配m=r.Match(subjectString);
while(m.Success){
对于(int i=1;i
Dupe。请看我在哪里向您提供了提示。请使用其他线程,而不是创建新线程。