C# 如何指定将替换为正则表达式的位置

C# 如何指定将替换为正则表达式的位置,c#,regex,regex-lookarounds,C#,Regex,Regex Lookarounds,我有正则表达式(?!\,)(?!X){3}[0-9\.\w\s\+\-\:\,]+和类似的字符串 "1", "S1", "S2", "1", "2" "1", "S1", "S2", "1", 2 "1", "S1", "S2", "1", "2", 3 我试图用正则表达式(通过匹配)解析这个字符串,但我对正则表达式的理解不强 我需要处理元素“1”、“S1”、“S2”,并跳过元素“1”、“2”。第一个想法是在正则表达式逻辑中指定,如“不接受发生,即从右开始的第一个(“2”-2),从右开始的第二

我有正则表达式
(?!\,)(?!X){3}[0-9\.\w\s\+\-\:\,]+
和类似的字符串

"1", "S1", "S2", "1", "2"
"1", "S1", "S2", "1", 2
"1", "S1", "S2", "1", "2", 3
我试图用正则表达式(通过匹配)解析这个字符串,但我对正则表达式的理解不强

我需要处理元素
“1”、“S1”、“S2”
,并跳过元素
“1”、“2”
。第一个想法是在正则表达式逻辑中指定,如“不接受发生,即从右开始的第一个(“2”-2),从右开始的第二个(“1”-1),但接受所有其他发生”

其主要思想是,这个逻辑应该只使用正则表达式,而不是C#代码(我说的是C#matches数组中的匹配对象位置-没有C#逻辑,应该只使用正则表达式)

如何更改正则表达式
(?!\,)(?!X){3}[0-9\.\w\s\+-\:\,]+
以指定不应处理的位置?

我想您需要:

^.*(?= *, *"?.*?"?, *"?.*?"?)
这将匹配最后两个元素之前的所有内容


您试图与正则表达式匹配什么?它与任何合理的内容都不匹配:
(?!X){3}
前瞻是量化的,lookahead是未编排的,character类包含
0-9
,而
\w
已经存在……这应该使用CSV解析器进行解析。正则表达式解决方案将充满错误。类似于
(?那么你想把最后两个元素的所有内容都放在左边?对MonkeyZeus说:是的,你是对的。我需要忽略最后两个事件。谢谢你的回答,但我更新了我的问题,因为看起来我问的形式不对。输入字符串可能是
“1”、“S1”、“S2”、“1”、“2”
“1”、“S1”,“S2”、“1”、“2
“1”、“S1”、“S2”、“1”、“2”、“3
因此,此注册表项不适用于我的所有输入字符串。我的意思是,字符串的大小由length@Arthur需要进行一些小的修改以适应无引号的值,如整数。请参阅我更新的regex和regex101 link.Hmmm,这是一个有趣的解决方案,但它阻止了逻辑”选择每个元素“
(?!\,)(?!X){3}[0-9\.\w\s\+\-\:\,]+
。即,匹配看起来像整个零件
“1”、“S1”、“S2”“
,不按元素分割。在我的reg exp中,每个匹配项都是每个元素-。是否可以将你的reg exp与我的reg exp合并,以获得行中每个元素的匹配项,最后两个元素除外?@Arthur你可以尝试类似于
“?(.??)”(?=*,*“?*?*?*?”)
但你真的应该使用CSV解析器。