C#正则表达式模式
我有这样一个字符串:C#正则表达式模式,c#,regex,C#,Regex,我有这样一个字符串: String1=[q:6][ilvl:70](randomword) 我需要三种模式来检索ilvl:后面的数字70,q:后面的数字6,还有一种模式来检索所有ascii字符。 我提出了这三种模式,但我失败了,因为它们没有完全符合上述三种模式 string rules_1 = @"(?i)\[ilvl:([0-9]{1,2})\]"; string rules_2 = @"(?i)\[q:([0-9]{1,2})\]"; string rules_3 = @"(?i)\(([
String1=[q:6][ilvl:70](randomword)
我需要三种模式来检索ilvl:后面的数字70,q:后面的数字6,还有一种模式来检索所有ascii字符。
我提出了这三种模式,但我失败了,因为它们没有完全符合上述三种模式
string rules_1 = @"(?i)\[ilvl:([0-9]{1,2})\]";
string rules_2 = @"(?i)\[q:([0-9]{1,2})\]";
string rules_3 = @"(?i)\(([[:ascii:]+]+)\)";
第一个检索的是[ilvl:70],而不是70
第二个检索[q:6],而不是6
第三个不检索任何内容,而是检索所有ascii字符
有正则表达式大师能帮我吗
提前感谢。用一个正则表达式检索所有三个:
^\[[^:]*:([^\]]*)\]\[[^:]*:([^\]]*)\]\(([^)]*)
在中,查看右侧窗格中的捕获组
示例代码:
string s1 = @"[q:6][ilvl:70](randomword)";
Match matchResults = null;
var myRegex = new Regex(@"^\[[^:]*:([^\]]*)\]\[[^:]*:([^\]]*)\]\(([^)]*)");
matchResults = myRegex.Match(s1);
string firstNumber = matchResults.Groups[1].Value;
string secondNumber = matchResults.Groups[2].Value;
string yourASCII = matchResults.Groups[3].Value;
解释
锚定声明我们位于字符串的开头^
匹配到第一个\[^:::*:
:
捕获组1的第一个值([^\]]*)
匹配到第二个\]\[[^:::*:
:
捕获组2的第二个值([^\]]*)
与括号匹配\]\(
将您的角色捕获到第3组([^)]*)
(?:(?<=ilvl:)[^\]]*|(?<=q:)[^\]]*|(?<=\()[^\)]*)
(?:(?您可以使用:
我想你想要任何能帮你解决问题的答案
正则表达式功能强大,但并非总是必需的。非正则表达式解决方案:
using System;
public class Program
{
public static void Main()
{
string s1=@"[q:6][ilvl:70](randomword)";
var tmp = s1.Split(new string [] {":","]" }, StringSplitOptions.None);
string res1 = tmp[1];
string res2 = tmp[3];
string res3 = s1.Split(new string [] {"](",")" }, StringSplitOptions.None)[1];
Console.WriteLine("1 -> "+res1);
Console.WriteLine("2 -> "+res2);
Console.WriteLine("3 -> "+res3);
}
}
fiddle->您是否确实在查看匹配的“组”值?
匹配将返回匹配的所有内容,而不仅仅是“()”中的内容,组“0”也将返回所有内容
这对我来说就像预期的那样:
string String1="[q:6][ilvl:70](randomword)";
Regex rules_1 = new Regex(@"(?i)\[ilvl:([0-9]{1,2})\]");
Regex rules_2 = new Regex(@"(?i)\[q:([0-9]{1,2})\]");
Regex rules_3 = new Regex(@"(?i)\(([a-zA-Z]+)\)");
var match1 = rules_1.Match(String1);
var match2 = rules_2.Match(String1);
var match3 = rules_3.Match(String1);
var value1 = match1.Groups[1].Value;
var value2 = match2.Groups[1].Value;
var value3 = match3.Groups[1].Value;
请注意,我必须将[[:ascii:][+]+
更改为[a-zA-Z]+
你不能嵌套[]
选择器(这对一个选择器没有意义),我也从来没有见过:ascii:
,但这会匹配本文中的所有字符([
,:
,0
,7
,等等。也是ascii字符)@igelineau谢谢!:)所有这些都是很好的解决方案。谢谢大家
using System;
public class Program
{
public static void Main()
{
string s1=@"[q:6][ilvl:70](randomword)";
var tmp = s1.Split(new string [] {":","]" }, StringSplitOptions.None);
string res1 = tmp[1];
string res2 = tmp[3];
string res3 = s1.Split(new string [] {"](",")" }, StringSplitOptions.None)[1];
Console.WriteLine("1 -> "+res1);
Console.WriteLine("2 -> "+res2);
Console.WriteLine("3 -> "+res3);
}
}
string String1="[q:6][ilvl:70](randomword)";
Regex rules_1 = new Regex(@"(?i)\[ilvl:([0-9]{1,2})\]");
Regex rules_2 = new Regex(@"(?i)\[q:([0-9]{1,2})\]");
Regex rules_3 = new Regex(@"(?i)\(([a-zA-Z]+)\)");
var match1 = rules_1.Match(String1);
var match2 = rules_2.Match(String1);
var match3 = rules_3.Match(String1);
var value1 = match1.Groups[1].Value;
var value2 = match2.Groups[1].Value;
var value3 = match3.Groups[1].Value;