C#中通过正则表达式如何找到有几个圆括号中的各个括号的内容 正则表达式c# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 再来个复杂点的--平衡组using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.IO;namespace sxLdfang{ class Program { static void Main(string[] args) { string html = @"s=oEditor.CreateBox([ ""NAME:BoxParameters"", ""XPosition:="" , ""-1.4mm"", ""YPosition:="" , ""1.4mm"", ""ZPosition:="" , ""0mm"", ""XSize:="" , ""0.6mm"", ""YSize:="" , ""1.4mm"", ""ZSize:="" , ""-0.6mm""], [ ""NAME:Attributes"", ""Name:="" , ""Box1"", ""Flags:="" , """", ""Color:="" , ""(132 132 193)"", ""Transparency:="" , 0, ""PartCoordinateSystem:="", ""Global"", ""UDMId:="" , """", ""MaterialValue:="" , ""\""vacuum\"""", ""SolveInside:="" , True])oEditor.ChangeProperty([ ""NAME:AllTabs"", [ ""NAME:Geometry3DCmdTab"", [ ""NAME:PropServers"", ""Box1:CreateBox:1"" ], [ ""NAME:ChangedProps"", [ ""NAME:XSize"", ""Value:="" , ""2mm"" ], [ ""NAME:YSize"", ""Value:="" , ""3mm"" ] ] ]])oEditor.CreateCylinder([ ""NAME:CylinderParameters"", ""XCenter:="" , ""0mm"", ""YCenter:="" , ""-2.2mm"", ""ZCenter:="" , ""0mm"", ""Radius:="" , ""0.824621125123532mm"", ""Height:="" , ""-1mm"", ""WhichAxis:="" , ""Z"", ""NumSides:="" , ""0""], [ ""NAME:Attributes"", ""Name:="" , ""Cylinder1"", ""Flags:="" , """", ""Color:="" , ""(132 132 193)"", ""Transparency:="" , 0, ""PartCoordinateSystem:="", ""Global"", ""UDMId:="" , """", ""MaterialValue:="" , ""\""vacuum\"""", ""SolveInside:="" , True])oEditor.ChangeProperty([ ""NAME:AllTabs"", [ ""NAME:Geometry3DCmdTab"", [ ""NAME:PropServers"", ""Box1:CreateBox:1"" ], [ ""NAME:ChangedProps"", [ ""NAME:XSize"", ""Value:="" , ""1mm"" ] ] ]])"; string pattern = @"(?isnx) #匹配模式,忽略大小写,“.”匹配任意字符\[ #开始标记“[” (?> #分组构造,用来限定量词“*”修饰范围 \[(?<Open>) #遇到开始标记,入栈,Open计数加1 | #分支结构 \](?<-Open>) #狭义平衡组,遇到结束标记,Open计数减1 | #分支结构 ((?![\[\]]).)* #右侧不为开始或结束标记的任意字符 )* #以上子串出现0次或任意多次 (?(Open)(?!)) #还有'OPEN',有则说明不配对,什么都不匹配\] #结束标记“]”"; MatchCollection mc = Regex.Matches(html, pattern); foreach (Match m in mc) { Console.WriteLine("\n\n----------------------------------------------------------------------------"); Console.WriteLine( m.Value); } Console.ReadKey(); } }}运行结果:----------------------------------------------------------------------------[ "NAME:BoxParameters", "XPosition:=" , "-1.4mm", "YPosition:=" , "1.4mm", "ZPosition:=" , "0mm", "XSize:=" , "0.6mm", "YSize:=" , "1.4mm", "ZSize:=" , "-0.6mm"]----------------------------------------------------------------------------[ "NAME:Attributes", "Name:=" , "Box1", "Flags:=" , "", "Color:=" , "(132 132 193)", "Transparency:=" , 0, "PartCoordinateSystem:=", "Global", "UDMId:=" , "", "MaterialValue:=" , "\"vacuum\"", "SolveInside:=" , True]----------------------------------------------------------------------------[ "NAME:AllTabs", [ "NAME:Geometry3DCmdTab", [ "NAME:PropServers", "Box1:CreateBox:1" ], [ "NAME:ChangedProps", [ "NAME:XSize", "Value:=" , "2mm" ], [ "NAME:YSize", "Value:=" , "3mm" ] ] ]]----------------------------------------------------------------------------[ "NAME:CylinderParameters", "XCenter:=" , "0mm", "YCenter:=" , "-2.2mm", "ZCenter:=" , "0mm", "Radius:=" , "0.824621125123532mm", "Height:=" , "-1mm", "WhichAxis:=" , "Z", "NumSides:=" , "0"]----------------------------------------------------------------------------[ "NAME:Attributes", "Name:=" , "Cylinder1", "Flags:=" , "", "Color:=" , "(132 132 193)", "Transparency:=" , 0, "PartCoordinateSystem:=", "Global", "UDMId:=" , "", "MaterialValue:=" , "\"vacuum\"", "SolveInside:=" , True]----------------------------------------------------------------------------[ "NAME:AllTabs", [ "NAME:Geometry3DCmdTab", [ "NAME:PropServers", "Box1:CreateBox:1" ], [ "NAME:ChangedProps", [ "NAME:XSize", "Value:=" , "1mm" ] ] ]] 谢谢楼上两位回答。现在问题来了,我同事说在string html = @"s=oEditor.CreateBox([ ""NAME:BoxParameters"", ""XPosition:="" , ""-1.4mm"", ""YPosition:="" , ""1.4mm"", ""ZPosition:="" , ""0mm"", ""XSize:="" , ""0.6mm"", ""YSize:="" , ""1.4mm"", ""ZSize:="" , ""-0.6mm""], [ ""NAME:Attributes"", ""Name:="" , ""Box1"", ""Flags:="" , """", ""Color:="" , ""(132 132 193)"", ""Transparency:="" , 0, ""PartCoordinateSystem:="", ""Global"", ""UDMId:="" , """", ""MaterialValue:="" , ""\""vacuum\"""", ""SolveInside:="" , True]) 对于如下字符串string html = @"s=oEditor.CreateBox([ ""NAME:BoxParameters"", ""XPosition:="" , ""-1.4mm"", ""YPosition:="" , ""1.4mm"", ""ZPosition:="" , ""0mm"", ""XSize:="" , ""0.6mm"", ""YSize:="" , ""1.4mm"", ""ZSize:="" , ""-0.6mm""], [ ""NAME:Attributes"", ""Name:="" , ""Box1"", ""Flags:="" , """", ""Color:="" , ""(132 132 193)"", ""Transparency:="" , 0, ""PartCoordinateSystem:="", ""Global"", ""UDMId:="" , """", ""MaterialValue:="" , ""\""vacuum\"""", ""SolveInside:="" , True])我需要把里面的XPosition等属性及对应的数值给读出来。我可以通过如下匹配项oEditor.CreateBox\(\s*\[\s*"NAME:BoxParameters",\s*"(?<XPosition>XPosition):=" , "(?<XPositionValue>-?\d.?(\d?)+mm)",\s*"(?<YPosition>YPosition):=" , "(?<YPositionValue>-?\d.?(\d?)+mm)",\s*"(?<ZPosition>ZPosition):=" , "(?<ZPositionValue>-?\d.?(\d?)+mm)",\s*"(?<XSize>XSize):=" , "(?<XSizeValue>-?\d.?(\d?)+mm)",\s*"(?<YSize>YSize):=" , "(?<YSizeValue>-?\d.?(\d?)+mm)",\s*"(?<ZSize>ZSize):=" , "(?<ZSizeValue>-?\d.?(\d?)+mm)"\s*\],能把前一个中括号的内容给读书来,并通过组的形式获取到各个属性及值。但是我用oEditor.CreateBox\(\s*\[\s*"NAME:BoxParameters",\s*"(?<XPosition>XPosition):=" , "(?<XPositionValue>-?\d.?(\d?)+mm)",\s*"(?<YPosition>YPosition):=" , "(?<YPositionValue>-?\d.?(\d?)+mm)",\s*"(?<ZPosition>ZPosition):=" , "(?<ZPositionValue>-?\d.?(\d?)+mm)",\s*"(?<XSize>XSize):=" , "(?<XSizeValue>-?\d.?(\d?)+mm)",\s*"(?<YSize>YSize):=" , "(?<YSizeValue>-?\d.?(\d?)+mm)",\s*"(?<ZSize>ZSize):=" , "(?<ZSizeValue>-?\d.?(\d?)+mm)"\s*\],\s*\[\s*\"NAME:Attributes",\s*\"Name:=" , "Box1",\s*\"Flags:=" , "",\s*\"Color:=" , "(132 132 193)",\s*\"Transparency:=" , 0,\s*\"PartCoordinateSystem:=", "Global",\s*\"UDMId:=" , "",\s*\"MaterialValue:=" , "\"vacuum\"",\s*\"SolveInside:=" , True\s*\]\)却无法读出整个oEditor.CreateBox对象的所有内容(匹配项也是从文本读取的)。即使是用[code=csharpoEditor.CreateBox\(\s*\[\s*"NAME:BoxParameters",\s*"(?<XPosition>XPosition):=" , "(?<XPositionValue>-?\d.?(\d?)+mm)",\s*"(?<YPosition>YPosition):=" , "(?<YPositionValue>-?\d.?(\d?)+mm)",\s*"(?<ZPosition>ZPosition):=" , "(?<ZPositionValue>-?\d.?(\d?)+mm)",\s*"(?<XSize>XSize):=" , "(?<XSizeValue>-?\d.?(\d?)+mm)",\s*"(?<YSize>YSize):=" , "(?<YSizeValue>-?\d.?(\d?)+mm)",\s*"(?<ZSize>ZSize):=" , "(?<ZSizeValue>-?\d.?(\d?)+mm)"\s*\],\s*\[][/code]都无法读出第二个中括号的左括号!!我猜是不是因为正则表达式在空格和换行符方面有一些注意事项我没考虑到?求大神解答~ 类继承时的重载 水晶报表布局 GridView 大小,小于外层TD的时候,显示到TD的顶部?怎实现 在.net 中导出固定格式的Excel数据 奇怪的问题,改变窗口的大小,button就看不到了 没分了,全给大家了 求解:winform下下载文件的进度条如何做?up者有分! C#窗体问题 rational xde 2003 for .net 带 license 求交换 borland together 1.01 for .net 和 license 怎样把dotnetfx做到安装程序里? C#中事件委托 之前那个帖子问得有点不清楚 重新发个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace sxLdfang
{
class Program
{
static void Main(string[] args)
{
string html = @"s=oEditor.CreateBox(
[
""NAME:BoxParameters"",
""XPosition:="" , ""-1.4mm"",
""YPosition:="" , ""1.4mm"",
""ZPosition:="" , ""0mm"",
""XSize:="" , ""0.6mm"",
""YSize:="" , ""1.4mm"",
""ZSize:="" , ""-0.6mm""
],
[
""NAME:Attributes"",
""Name:="" , ""Box1"",
""Flags:="" , """",
""Color:="" , ""(132 132 193)"",
""Transparency:="" , 0,
""PartCoordinateSystem:="", ""Global"",
""UDMId:="" , """",
""MaterialValue:="" , ""\""vacuum\"""",
""SolveInside:="" , True
])
oEditor.ChangeProperty(
[
""NAME:AllTabs"",
[
""NAME:Geometry3DCmdTab"",
[
""NAME:PropServers"",
""Box1:CreateBox:1""
],
[
""NAME:ChangedProps"",
[
""NAME:XSize"",
""Value:="" , ""2mm""
],
[
""NAME:YSize"",
""Value:="" , ""3mm""
]
]
]
])
oEditor.CreateCylinder(
[
""NAME:CylinderParameters"",
""XCenter:="" , ""0mm"",
""YCenter:="" , ""-2.2mm"",
""ZCenter:="" , ""0mm"",
""Radius:="" , ""0.824621125123532mm"",
""Height:="" , ""-1mm"",
""WhichAxis:="" , ""Z"",
""NumSides:="" , ""0""
],
[
""NAME:Attributes"",
""Name:="" , ""Cylinder1"",
""Flags:="" , """",
""Color:="" , ""(132 132 193)"",
""Transparency:="" , 0,
""PartCoordinateSystem:="", ""Global"",
""UDMId:="" , """",
""MaterialValue:="" , ""\""vacuum\"""",
""SolveInside:="" , True
])
oEditor.ChangeProperty(
[
""NAME:AllTabs"",
[
""NAME:Geometry3DCmdTab"",
[
""NAME:PropServers"",
""Box1:CreateBox:1""
],
[
""NAME:ChangedProps"",
[
""NAME:XSize"",
""Value:="" , ""1mm""
]
]
]
])";
string pattern = @"(?isnx) #匹配模式,忽略大小写,“.”匹配任意字符
\[ #开始标记“[”
(?> #分组构造,用来限定量词“*”修饰范围
\[(?<Open>) #遇到开始标记,入栈,Open计数加1
| #分支结构
\](?<-Open>) #狭义平衡组,遇到结束标记,Open计数减1
| #分支结构
((?![\[\]]).)* #右侧不为开始或结束标记的任意字符
)* #以上子串出现0次或任意多次
(?(Open)(?!)) #还有'OPEN',有则说明不配对,什么都不匹配
\] #结束标记“]”";
MatchCollection mc = Regex.Matches(html, pattern);
foreach (Match m in mc)
{
Console.WriteLine("\n\n----------------------------------------------------------------------------");
Console.WriteLine( m.Value);
}
Console.ReadKey();
}
}
}运行结果:
----------------------------------------------------------------------------
[
"NAME:BoxParameters",
"XPosition:=" , "-1.4mm",
"YPosition:=" , "1.4mm",
"ZPosition:=" , "0mm",
"XSize:=" , "0.6mm",
"YSize:=" , "1.4mm",
"ZSize:=" , "-0.6mm"
]
----------------------------------------------------------------------------
[
"NAME:Attributes",
"Name:=" , "Box1",
"Flags:=" , "",
"Color:=" , "(132 132 193)",
"Transparency:=" , 0,
"PartCoordinateSystem:=", "Global",
"UDMId:=" , "",
"MaterialValue:=" , "\"vacuum\"",
"SolveInside:=" , True
]
----------------------------------------------------------------------------
[
"NAME:AllTabs",
[
"NAME:Geometry3DCmdTab",
[
"NAME:PropServers",
"Box1:CreateBox:1"
],
[
"NAME:ChangedProps",
[
"NAME:XSize",
"Value:=" , "2mm"
],
[
"NAME:YSize",
"Value:=" , "3mm"
]
]
]
]
----------------------------------------------------------------------------
[
"NAME:CylinderParameters",
"XCenter:=" , "0mm",
"YCenter:=" , "-2.2mm",
"ZCenter:=" , "0mm",
"Radius:=" , "0.824621125123532mm",
"Height:=" , "-1mm",
"WhichAxis:=" , "Z",
"NumSides:=" , "0"
]
----------------------------------------------------------------------------
[
"NAME:Attributes",
"Name:=" , "Cylinder1",
"Flags:=" , "",
"Color:=" , "(132 132 193)",
"Transparency:=" , 0,
"PartCoordinateSystem:=", "Global",
"UDMId:=" , "",
"MaterialValue:=" , "\"vacuum\"",
"SolveInside:=" , True
]
----------------------------------------------------------------------------
[
"NAME:AllTabs",
[
"NAME:Geometry3DCmdTab",
[
"NAME:PropServers",
"Box1:CreateBox:1"
],
[
"NAME:ChangedProps",
[
"NAME:XSize",
"Value:=" , "1mm"
]
]
]
]
string html = @"s=oEditor.CreateBox(
[
""NAME:BoxParameters"",
""XPosition:="" , ""-1.4mm"",
""YPosition:="" , ""1.4mm"",
""ZPosition:="" , ""0mm"",
""XSize:="" , ""0.6mm"",
""YSize:="" , ""1.4mm"",
""ZSize:="" , ""-0.6mm""
],
[
""NAME:Attributes"",
""Name:="" , ""Box1"",
""Flags:="" , """",
""Color:="" , ""(132 132 193)"",
""Transparency:="" , 0,
""PartCoordinateSystem:="", ""Global"",
""UDMId:="" , """",
""MaterialValue:="" , ""\""vacuum\"""",
""SolveInside:="" , True
])
string html = @"s=oEditor.CreateBox(
[
""NAME:BoxParameters"",
""XPosition:="" , ""-1.4mm"",
""YPosition:="" , ""1.4mm"",
""ZPosition:="" , ""0mm"",
""XSize:="" , ""0.6mm"",
""YSize:="" , ""1.4mm"",
""ZSize:="" , ""-0.6mm""
],
[
""NAME:Attributes"",
""Name:="" , ""Box1"",
""Flags:="" , """",
""Color:="" , ""(132 132 193)"",
""Transparency:="" , 0,
""PartCoordinateSystem:="", ""Global"",
""UDMId:="" , """",
""MaterialValue:="" , ""\""vacuum\"""",
""SolveInside:="" , True
])
我需要把里面的XPosition等属性及对应的数值给读出来。
我可以通过如下匹配项
oEditor.CreateBox\(
\s*\[
\s*"NAME:BoxParameters",
\s*"(?<XPosition>XPosition):=" , "(?<XPositionValue>-?\d.?(\d?)+mm)",
\s*"(?<YPosition>YPosition):=" , "(?<YPositionValue>-?\d.?(\d?)+mm)",
\s*"(?<ZPosition>ZPosition):=" , "(?<ZPositionValue>-?\d.?(\d?)+mm)",
\s*"(?<XSize>XSize):=" , "(?<XSizeValue>-?\d.?(\d?)+mm)",
\s*"(?<YSize>YSize):=" , "(?<YSizeValue>-?\d.?(\d?)+mm)",
\s*"(?<ZSize>ZSize):=" , "(?<ZSizeValue>-?\d.?(\d?)+mm)"
\s*\],
能把前一个中括号的内容给读书来,并通过组的形式获取到各个属性及值。但是我用
oEditor.CreateBox\(
\s*\[
\s*"NAME:BoxParameters",
\s*"(?<XPosition>XPosition):=" , "(?<XPositionValue>-?\d.?(\d?)+mm)",
\s*"(?<YPosition>YPosition):=" , "(?<YPositionValue>-?\d.?(\d?)+mm)",
\s*"(?<ZPosition>ZPosition):=" , "(?<ZPositionValue>-?\d.?(\d?)+mm)",
\s*"(?<XSize>XSize):=" , "(?<XSizeValue>-?\d.?(\d?)+mm)",
\s*"(?<YSize>YSize):=" , "(?<YSizeValue>-?\d.?(\d?)+mm)",
\s*"(?<ZSize>ZSize):=" , "(?<ZSizeValue>-?\d.?(\d?)+mm)"
\s*\],
\s*\[
\s*\"NAME:Attributes",
\s*\"Name:=" , "Box1",
\s*\"Flags:=" , "",
\s*\"Color:=" , "(132 132 193)",
\s*\"Transparency:=" , 0,
\s*\"PartCoordinateSystem:=", "Global",
\s*\"UDMId:=" , "",
\s*\"MaterialValue:=" , "\"vacuum\"",
\s*\"SolveInside:=" , True
\s*\]\)
却无法读出整个oEditor.CreateBox对象的所有内容(匹配项也是从文本读取的)。
即使是用
[code=csharpoEditor.CreateBox\(
\s*\[
\s*"NAME:BoxParameters",
\s*"(?<XPosition>XPosition):=" , "(?<XPositionValue>-?\d.?(\d?)+mm)",
\s*"(?<YPosition>YPosition):=" , "(?<YPositionValue>-?\d.?(\d?)+mm)",
\s*"(?<ZPosition>ZPosition):=" , "(?<ZPositionValue>-?\d.?(\d?)+mm)",
\s*"(?<XSize>XSize):=" , "(?<XSizeValue>-?\d.?(\d?)+mm)",
\s*"(?<YSize>YSize):=" , "(?<YSizeValue>-?\d.?(\d?)+mm)",
\s*"(?<ZSize>ZSize):=" , "(?<ZSizeValue>-?\d.?(\d?)+mm)"
\s*\],
\s*\[][/code]
都无法读出第二个中括号的左括号!!
我猜是不是因为正则表达式在空格和换行符方面有一些注意事项我没考虑到?求大神解答~