正则表达式C#搜索匹配模式的文件以开始,以结束
在C#中,我想搜索匹配发生的位置,从括号中的整数开始,后跟这些字符“PLA”括号和“Match”(我将读入内存),直到到达下一个集合 因此,示例代码将是正则表达式C#搜索匹配模式的文件以开始,以结束,c#,regex,C#,Regex,在C#中,我想搜索匹配发生的位置,从括号中的整数开始,后跟这些字符“PLA”括号和“Match”(我将读入内存),直到到达下一个集合 因此,示例代码将是 (1965 ("PLA") ("GEN_ANGLE") ("Line to line angle") ( ("clinesegs" 3565.01 1265.99 "SURFACE") ("clinesegs" 3618.02 1255.00 "SURFACE") )
(1965
("PLA")
("GEN_ANGLE")
("Line to line angle")
(
("clinesegs" 3565.01 1265.99 "SURFACE")
("clinesegs" 3618.02 1255.00 "SURFACE")
)
((3586.02 1267.20 "SURFACE"))
(120.000)
(90.000)
)
(1966
("PLA")
("GEN_ANGLE")
("Line to line angle")
(
("clinesegs" 3831.98 1255.00 "SURFACE")
("clinesegs" 3882.92 1268.07 "SURFACE")
)
((3863.98 1267.20 "SURFACE"))
(120.000)
(90.000)
)
我想“匹配”数据,只在知道“1965”是我要找的ID的基础上获取这些数据
(1965
("PLA")
("GEN_ANGLE")
("Line to line angle")
(
("clinesegs" 3565.01 1265.99 "SURFACE")
("clinesegs" 3618.02 1255.00 "SURFACE")
)
((3586.02 1267.20 "SURFACE"))
(120.000)
(90.000)
)
我可以找到“(1965年)与:
…或(前面加上):
…但我似乎无法真正让这些类型的正则表达式工作,它必须是间距和换行符在下一组数据开始之前,我一直在理解结尾PLA的匹配和“检测”结尾
)
(1966(“PLA”),因为我想这是我在匹配中用来检测匹配结束的,但只是不包括在结果中。如果你知道后面是(1966(“PLA”)
如果不在数据内部出现,可以使用以下方法:
(?xs) # ignore spaces, comments and make . match \n
\(1965\s+\("PLA"\)
.*? # ungreedy
(?=\(1966\s+\("PLA"\)|$) # lookahead does not include this in the match
可以用C#这样引用:
这就是我想到的: 编辑:我修改了表达式以说明N个“倾斜”组,可用于“线到线角度”组前后任意数量的组
它将捕获从(1965
到结束)
尝试以下模式:在此模式中使用1965年的id
(?=\(1965)(?=.*\(\"PLA\"\).*)\(((([^)])*\([^)]+\)[^)]*)\))*\)*[^\)]*\)
使用RegexOptions。单线在开始尝试匹配括号对之前,请确保通读最高评分的答案(可能,但其他方法可能更容易)。不一定要遵循1966年,我想我应该寻找“(\d+后跟(“PLA”)@CoreStone,然后将1966
替换为\d+
。我今天刚买了这个工具,就把它粘贴到了“RegexBuddy”中,但也许我做得不对,我会再看一遍,但你要匹配11次(11行)。当我有40个“线对线角度”时会发生什么“那么,仅仅计数并不能成功结束比赛,我需要找到下一个“记录”的开始位置,即”(1966(“PLA”)“是的,我希望它是用xml完成的,但这是我必须处理的。thxOk,我回到绘图板上,为您解出了这个问题。这个表达式有点长,但它解释了N个“clinesegs”。现在,它希望其余的项目都是相同的(或多或少),但如果您查看该模式,您应该能够根据需要使其更加灵活。编辑内容在我的原始帖子中。
(?xs) # ignore spaces, comments and make . match \n
\(1965\s+\("PLA"\)
.*? # ungreedy
(?=\(1966\s+\("PLA"\)|$) # lookahead does not include this in the match
var re = @"(?xs) # ignore spaces, comments and make . match \n
\(1965\s+\(""PLA""\)
.*? # ungreedy
(?=\(1966\s+\(""PLA""\)|$) # lookahead does not include this in the match
";
(?=\(1965)(?=.*\(\"PLA\"\).*)\(((([^)])*\([^)]+\)[^)]*)\))*\)*[^\)]*\)