有没有办法使用正则表达式动态分组单词?
我在c#
中有这段代码string strRegex = @"(?<=\d+)(.*)(?=md\.?)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"2 Elizabeth Winslow md. Gilbert Brooks";
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
if (myMatch.Success)
{
Debug.WriteLine(myMatch.Value);
}
}
这是我的示例文本
2 Elizabeth Winslow md. Gilbert Brooks
8 Rebekah Gulliver Stall md. George Leonard Dary
这是我的示例输出
Fname: Elizabeth : Index: 7
Lname: Winslow : Index: 40
Fname: Rebekah Gulliver : Index: 3
LName: Stall : Index: 20
在我的代码中,我只能获得number
和单词md.
之间的文字
如果我要分开单词。我无法获得单词的索引。
是否可以使用Regex动态分组这些单词?
或者另外一个解决方法是获取文本和索引吗?
答案 0 :(得分:2)
您可以使用以下正则表达式解决方案:
var s = " 2 Elizabeth Winslow md. Gilbert Brooks";
var result = Regex.Matches(s, @"\d\s+(?<FName>.*?)\s+(?<LName>\S+)\s*md\b")
.Cast<Match>()
.Select(m => new {
FName = m.Groups["FName"].Value,
FIndex = m.Groups["FName"].Index+1,
LName = m.Groups["LName"].Value,
LIndex = m.Groups["LName"].Index+1
}).ToList();
foreach (var pair in result)
Console.WriteLine($"{pair.FName} : {pair.FIndex} : {pair.LName} : {pair.LIndex}");
// => Elizabeth : 7 : Winslow : 40
请参阅C# demo
正则表达式是
\d\s+(?<FName>.*?)\s+(?<LName>\S+)\s*md\b
请参阅its online demo。
<强>详情
\d
- 数字\s+
- 一个或多个空格(?<FName>.*?)
- Group&#34; FName&#34;:除了换行符之外的任何0 +字符,尽可能少\s+
- 一个或多个空格(?<LName>\S+)
- Group&#34; LName&#34;:除了空格之外的任何0 +字符,尽可能多\s*
- 0个或更多空格md\b
- 整个单词md
(\b
是单词边界)