如何使用C#regex解析以下内容
我有这样一段文字:如何使用C#regex解析以下内容,c#,regex,C#,Regex,我有这样一段文字:“((FIELD1_名称,如'Product%')和(Instr(FIELD1_名称,'Product_typ')=1))” 我想从字符串的Instr部分解析FIELD1\u NAME和Product\u typ 这不起作用:@“Instr((?[A-Z0-9+),“(?([^']|('')+)”您需要转义Instr之后的第一个(),并将值组中的组设为非捕获组 Instr\((?<column>[A-Z0-9_]+),\s*'(?<value>(?:[^
“((FIELD1_名称,如'Product%')和(Instr(FIELD1_名称,'Product_typ')=1))”代码>
我想从字符串的Instr
部分解析FIELD1\u NAME
和Product\u typ
这不起作用:@“Instr((?[A-Z0-9+),“(?([^']|('')+)”
您需要转义Instr
之后的第一个(
),并将值组中的组设为非捕获组
Instr\((?<column>[A-Z0-9_]+),\s*'(?<value>(?:[^']|(''))+)'
Instr\(?[A-Z0-9]+),\s*'(?(?:[^']|('')+)
此正则表达式使用惰性量词上的点all来获取var。
主要是修剪,因为你没有说明这是为了验证
# @"(?s)Instr\s*\(\s*(?<feild>.*?)\s*,\s*'\s*(?<prodtype>.*?)\s*'\s*\)"
(?s)
Instr
\s*
\(
\s*
(?<feild> .*? ) #_(1)
\s* , \s*
'
\s*
(?<prodtype> .*? ) #_(2)
\s*
'
\s*
\)
\@“(?s)Instr\s*\(\s*(?*?)\s*,\s*'\s*(?*?)\s*”\s*\)
(?s)
仪表
\s*
\(
\s*
(? .*? ) #_(1)
\s*,\s*
'
\s*
(? .*? ) #_(2)
\s*
'
\s*
\)
你需要的是一个解析器,而不是正则表达式。无论你现在对正则表达式做什么,都注定会成为一个黑客。去做真正的事情,编写一个简单的递归下降解析器。你想用这个([^']|('')+
?@sin-([^']|“”)+“
匹配一个(非空)单引号字符串,其中一个引号是“转义的”通过将两个字符串放在一行中。(类似于C#的@“…”
字符串样式)。也就是说,它正确地解析这样编码的字符串:“太酷了!”
。