两个字符串之间的正则表达式字符串,包括括号
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 字符串的列表,我想要的是根据“开始”和“结束”找到一个,所以我想我循环遍历所有字符串并尝试匹配使用正则表达式。将字符串的开始和结束部分放入模式中。
如果正则表达式匹配我提取字符串的中间并可以完全构建它。然后可以在列表中找到字符串的索引以上是关于两个字符串之间的正则表达式字符串,包括括号的主要内容,如果未能解决你的问题,请参考以下文章