C#和Regex - 无法识别的分组构造

时间:2015-12-28 11:47:22

标签: c# regex

目前正致力于我的客户/服务器应用程序论文。如果服务器收到这样的信息,我遇到了麻烦:

client = MongoClient(DB_URL)
db = client['yourDb']

doc = "your new doc"
adoc = ADoc(db, app.config)

adoc.insert(doc)

我已设置当前模式:

ProToCooL,unknown|DESKTOP-29COFES,10.20.9.53|Hewlett-Packard,179C,PCWJA001X3UHII,KBC Version 42.32|i5-3320M,2.60GHz,2,4,256,3072,U3E1,GenuineIntel|{2,(IDT High Definition Audio CODEC,IDT),(Intel(R) Display Audio,Intel(R) Corporation)}|{2,(Samsung,003355A3,M471B5773DH0-CH9  ,24,2147483648,1333),(Hynix/Hyundai,467CA639,HMT351S6EFR8A-PB  ,24,4294967296,1333)}|{1,(IDE,Hitachi HTS725050A7E630,      FT51009Y7J61BK,3,733004892,476937.531738281)}|{7,(Send To OneNote 2013,False,Local,Send to Microsoft OneNote 15 Driver),(Microsoft XPS Document Writer,False,Local,Microsoft XPS Document Writer v4),(Microsoft Print to PDF,False,Local,Microsoft Print To PDF),(HP Universal Printing PCL 6,False,Local,HP Universal Printing PCL 6),(HP LaserJet P3010 Series (10.20.9.36),False,Local,HP Universal Printing PCL 6),(Fax,False,Local,Microsoft Shared Fax Driver),(Adobe PDF,True,Local,Adobe PDF Converter)}

在提取我需要的所有东西方面做得不错,但问题是当我以这种方式在C#中使用它时:

\(((?:[^()]|(?R))+)\)

我得到一个:无法识别的分组构造。例外,我很难找到错误的原因因为我不太了解C#的regexp,或者找不到解决方法。

1 个答案:

答案 0 :(得分:6)

.NET正则表达式不支持recursion。您正在使用的正则表达式(\(((?:[^()]|(?R))+)\))适用于PCRE,您可以在C#应用中将其与PCRE.NET library一起使用。

作为替代方案,您可以使用.NET正则表达式匹配平衡括号:

\(((?>[^()]+|\((?<n>)|\)(?<-n>))+(?(n)(?!)))\)

请参阅regex demo

它将所有这12个匹配作为PCRE regex返回。