【问题标题】:Regex to find string pattern正则表达式查找字符串模式
【发布时间】:2021-09-15 17:47:25
【问题描述】:

我需要在较大的文本中找到文本模式 [anystring].[anystring]。

我写了一个正则表达式代码来实现这个

var pattern = @"\[(.*?)\]\.\[(.*?)\]";
string CustomText = "some text here [anystring].[anystring] some text here etc"
var matchesfound = System.Text.RegularExpressions.Regex.Matches(CustomText, pattern);

此代码工作正常并检测到“[string].[string]”模式,但它失败了

var pattern = @"\[(.*?)\]\.\[(.*?)\]";
string CustomText = "[somestring]=[anystring].[anystring]"
var matchesfound = System.Text.RegularExpressions.Regex.Matches(CustomText, pattern)

在上述场景中,它标识了整个字符串“[somestring]=[anystring].[anystring]”,但我只希望将“[anystring].[anystring]”标识为匹配项。请问有什么帮助吗?谢谢。

【问题讨论】:

  • 使用\[([^][]*)\]\.\[([^][]*)\]

标签: c# regex


【解决方案1】:

你可以使用

\[([^][]*)]\.\[([^][]*)]

请参阅regex demo详情

  • \[ - 一个 [ 字符
  • ([^][]*) - 第 1 组:除 [] 之外的任何零个或多个字符
  • ]\.\[ - ].[ 子字符串
  • ([^][]*) - 第 2 组:除 [] 之外的任何零个或多个字符
  • ] - ] 字符。

C# demo

var pattern = @"\[([^][]*)]\.\[([^][]*)]";
var CustomText = "[somestring]=[anystring].[anystring]";
var matchesfound = System.Text.RegularExpressions.Regex.Matches(CustomText, pattern);
foreach (Match m in matchesfound) 
{
    Console.WriteLine($"Group 1: {m.Groups[1].Value}\nGroup 2: {m.Groups[2].Value}");
}

输出:

Group 1: anystring
Group 2: anystring

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-16
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多