两个字符串之间的正则表达式字符串,包括括号

Posted

技术标签:

【中文标题】两个字符串之间的正则表达式字符串,包括括号【英文标题】:Regex string between two strings includes brakets 【发布时间】:2021-11-24 07:19:24 【问题描述】:

我对一些正则表达式感到困惑。

测试字符串例如

Path.parent.child[0]

我需要提取“父” 我总是知道测试字符串的开始“路径”和结束“孩子 [0]”。 end 也可以是“child[1]”或没有“[]”

我尝试使用:(?<=Path.).*?(?=.child[0]) 但它找不到匹配项。我认为子字符串中的 [] 是问题所在。

【问题讨论】:

您必须转义左方括号(?<=Path.).*?(?=\.child\[[0-9]+]) 您也可以使用捕获组Path\.(\w+)\.child\[[0-9]+] 编写没有环视的内容 如何在我的 c# 代码中使用它? 在此处查看 C# 示例 regex101.com/r/Ui1FFR/1/codegen?language=csharp 为什么你的正则表达式中没有点? string my Path = "Path" , string myChild="child[0]" 。然后我喜欢把它放在我的表达式中,比如 var results = regex.match(testString,$"myPath\.(w+)\.myChild[[0-9]+]) 【参考方案1】:

一个可能有效的正则表达式是^[^.]*\.(.*)\.[^.]*\[?\d?\]?$

^ 行首 [^.]* 除了点以外的任何东西 \. 文字点 (.*) 任何东西,作为一组捕获 \. 又是一个文字点 [^.]* 除了点之外的任何东西 \[?\d?\]? 可选括号和索引。如果您不介意其他群组,可以是 (\[\d\])?$ 行尾

查看Regex101.com

但是,如果你总是知道开始和结束,你可以切换到非正则表达式的方法:

var start = "Path";
var end = "child[0]";
var s = start+".parent."+end;
// +1 for the first dot, -2 for two dots
var extracted = s.Substring(start.Length+1, s.Length-start.Length-end.Length-2);
Console.WriteLine(extracted);

【讨论】:

甚至.Split('.')[1] @CaiusJard:是的,如果parent 里面没有更多的点 谢谢托马斯,我认为你的非正则表达式方法正是我想要的。 啊不那么容易我有一个带有 som 字符串的列表,我想要的是根据“开始”和“结束”找到一个,所以我想我循环遍历所有字符串并尝试匹配使用正则表达式。将字符串的开始和结束部分放入模式中。 如果正则表达式匹配我提取字符串的中间并可以完全构建它。然后可以在列表中找到字符串的索引

以上是关于两个字符串之间的正则表达式字符串,包括括号的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式截取两个指定字符串之间的内容?

js-正则表达式

正则表达式(re)

正则表达式获得两个字符串之间的内容

php用正则表达式怎么获得两个字符串之间字符

大括号之间的正则表达式搜索