正则表达式查找字符串模式

Posted

技术标签:

【中文标题】正则表达式查找字符串模式【英文标题】: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]”标识为匹配项。请问有什么帮助吗?谢谢。

【问题讨论】:

使用\[([^][]*)\]\.\[([^][]*)\] 【参考方案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

【讨论】:

以上是关于正则表达式查找字符串模式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式及常用编辑查找命令

在正则表达式的模式中查找字符

php正则表达式

在字符串列表中查找特定模式(正则表达式)(Python)

不用正则表达式来查找文本模式

SQL 注释中的 Java 正则表达式查找/替换模式