【问题标题】: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# 代码中使用它?
  • 为什么你的正则表达式中没有点?
  • string my Path = "Path" , string myChild="child[0]" 。然后我喜欢把它放在我的表达式中,比如 var results = regex.match(testString,$"{myPath}\.(w+)\.{myChild}[[0-9]+])

标签: c# regex


【解决方案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 字符串的列表,我想要的是根据“开始”和“结束”找到一个,所以我想我循环遍历所有字符串并尝试匹配使用正则表达式。将字符串的开始和结束部分放入模式中。
  • 如果正则表达式匹配我提取字符串的中间并可以完全构建它。然后可以在列表中找到字符串的索引
猜你喜欢
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多