有没有办法在C#中获取捕获组的名称?
string line = "No.123456789 04/09/2009 999";
Regex regex = new Regex(@"(?<number>[\d]{9}) (?<date>[\d]{2}/[\d]{2}/[\d]{4}) (?<code>.*)");
GroupCollection groups = regex.Match(line).Groups;
foreach (Group group in groups)
{
Console.WriteLine("Group: {0}, Value: {1}", ???, group.Value);
}
Run Code Online (Sandbox Code Playgroud)
我想得到这个结果:
Group: [I don´t know what should go here], Value: 123456789 04/09/2009 999 Group: number, Value: 123456789 Group: date, Value: 04/09/2009 Group: code, Value: 999
我正在尝试创建一个通用的格式化程序/解析器组合.
示例场景:
var format = "{0}-{1}"var arr = new[] { "asdf", "qwer" }var res = string.Format(format, arr)我想要做的是将格式化的字符串恢复回对象(字符串)数组.像(伪代码)的东西:
var arr2 = string.Unformat(format, res)
// when: res = "asdf-qwer"
// arr2 should be equal to arr
Run Code Online (Sandbox Code Playgroud)
有没有经验做过这样的事情?我正在考虑使用正则表达式(修改原始格式字符串,然后将其传递给Regex.Matches以获取数组)并为格式字符串中的每个占位符运行它.这是可行的还是还有其他更有效的解决方案?
可能重复:
解析格式化的字符串.
如何使用String.Format格式并将其输出转换为输入?
例如:
string formatString = "My name is {0}. I have {1} cow(s).";
string s = String.Format(formatString, "strager", 2);
// Call the magic method...
ICollection<string> parts = String.ReverseFormat(formatString, s);
// parts now contains "strager" and "2".
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用正则表达式来执行此操作,但我想使用相同的格式字符串,因此我只需要维护一行代码而不是两行代码.
我试图从HTML字符串中提取href和src链接.根据这篇文章,我能够得到图像部分.任何人都可以帮助调整正则表达式以包含集合中的href URL吗?
public List<string> GetLinksFromHtml(string content)
{
string regex = @"<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>";
var matches = Regex.Matches(content, regex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
var links = new List<string>();
foreach (Match item in matches)
{
string link = item.Groups[1].Value;
links.Add(link);
}
return links;
}
Run Code Online (Sandbox Code Playgroud) 我已经写好了表达式,但是每当我运行代码时,我都会得到整个字符串和一大堆空值:
Regex regex = new Regex(@"y=\([0-9]\)\([0-9]\)(\s|)\+(\s+|)[0-9]");
Match match = regex.Match("y=(4)(5)+6");
for (int i = 0; i < match.Length; i++)
{
MessageBox.Show(i+"---"+match.Groups[i].Value);
}
Run Code Online (Sandbox Code Playgroud)
预期输出:4、5、6(在不同的 MessageBox 中)
实际输出:y=(4)(5)+6
它查找输入的字符串是否正确,但一旦正确,我就无法获得特定值(4、5 和 6)。我该怎么做才能获得该代码?这可能是非常简单的事情,但我已经尝试查看 MSDN match.NextMatch 文章,这似乎也无济于事。
谢谢!
我正在编写一个影响分析工具,它将解析一堆选定的文件类型,并在文件中找到类和方法调用(在本例中为.cs文件).我设法编写了一个正则表达式,可以找到一行代码是否为方法调用.
Regex re = new Regex(
@"\b(public|private|internal|protected)\s*" +
"(static|virtual|abstract)?\s*[a-zA-Z]*\s[a-zA-Z]+\s*" +
"\((([a-zA-Z\[\]\<\>]*\s*[a-zA-Z]*\s*)[,]?\s*)+\)");
Run Code Online (Sandbox Code Playgroud)
然而; 我无法弄清楚如何从正则表达式中获取方法名称.它将一行识别为匹配,但如何提取实际方法名称.对此的任何帮助都会很棒.
此外; 我不确定这是不是它实际上是如何完成的,但还有其他(最新的)c#文件解析器能够从文件中提供方法名称和类名列表吗?
我有一组基于我分割字符串的值
string[] seperator = new string[9];
seperator[0] = "*"; //is the client
seperator[1] = "/"; //is the name of company
seperator[2] = "("; //name of the market
seperator[5] = ":"; //ID
seperator[6] = "?"; //orderType
seperator[3] = "!@"; //realtive Time
seperator[4] = "!+"; //
seperator[7] = "+"; //quantity
seperator[8] = "@";//price
string[] result = values.Split(seperator, StringSplitOptions.None);
Run Code Online (Sandbox Code Playgroud)
例如:输入字符串是*A/AB(M!@ 12:6?SIMPLE!+ 5 + 2
OUTPUT
[0]: ""
[1]: "A"
[2]: "AB"
[3]: "M"
[4]: "12"
[5]: "6"
[6]: "SIMPLE"
[7]: "5"
[8]: "2" … Dim strOrig = "192/8' 33/5' 76/24' 17/12'"
Run Code Online (Sandbox Code Playgroud)
大家好,我想在"/"之前获得每个数字.输出将是318.关于如何实现它,我能想到的是:
1.通过查找"间距"作为每个段的终点并将它们放入数组中来拆分所有段.例如(0)192/8,(1)33/5,(2)76/24等......
2.通过循环数组,查找斜杠"/"并获取它之前的数字并将其求和直到循环结束.例如(0)192,(1)33,(2)76等......
我想知道我的方法是否值得付出努力,因为我想学习比这更有效的方法.谢谢大家.