我尝试了\w+\:(\w+\-?\.?(\d+)?)
,但这是不正确的
我有以下文字
<staticText:HelloWorld>_<xmlNode:Node.03>_<date:yyy-MM-dd>_<time:HH-mm-ss-fff>
The end result I want is something like the following
["staticText:HelloWorld", "xmlNode:Node.03","date:yyy-MM-dd","time:HH-mm-ss-fff"]
答案 0 :(得分:2)
您可以使用以下正则表达式。
<(.*?)>
然后看看组如何工作以检索结果。
Regex rx = new Regex("<(.*?)>");
string text = "<staticText:HelloWorld>_<xmlNode:Node.03>_<date:yyy-MM-dd>_<time:HH-mm-ss-fff>";
MatchCollection matches = rx.Matches(text);
Console.WriteLine(matches.Count);
foreach(Match match in matches){
var groups = match.Groups;
Console.WriteLine(groups[1]);
}
答案 1 :(得分:2)
此行应该能够匹配内容:
<(.*?)>
它会在您似乎不需要的末端捕获箭头,但是您可以在不使用正则表达式的单词后将其删除。
您应该考虑使用像https://regexr.com这样的网站-通过允许您粘贴案例并查看案例的工作方式,它在编写正则表达式方面成倍地发挥作用。
答案 2 :(得分:2)
匹配<>中的任何字符串。希望这会有所帮助。
<(。*?)>
答案 3 :(得分:2)
您的模式与示例数据的第3和第4部分不匹配,因为在\w+\-?\.?(\d+)?
这部分中,破折号和数字仅匹配一次,因此不再重复。
对于示例数据,您可以使用character class [\w.-]+
来匹配冒号后的部分,以使匹配范围更广:
<(\w+\:[\w.-]+)>
或者更具体地讲,请使用重复的模式为Node.03
部分和年月日小时等部分指定模式。
<(\w+\:\w+(?:\.\d+|\d+(?:-\d+)+)?)>
说明
<
匹配<
(
捕获组
\w+\:\w+
匹配1个以上的字符,:
和1个以上的字符(?:
非捕获组
\.\d+
匹配.
和1个以上的数字|
或\d+(?:-\d+)+
匹配1位以上的数字,并重复匹配1次以上-
和1位以上的数字)?
关闭非捕获组并将其设置为可选)
关闭捕获组>