特定模式的正则表达式提取
Posted
技术标签:
【中文标题】特定模式的正则表达式提取【英文标题】:Regex extraction of a specific pattern 【发布时间】:2017-12-19 01:56:21 【问题描述】:我有以下格式的字符串。我有以下三种情况:
场景 1:
"\\hjsschjsn\Bunong.PU2.PV/-56Noogg.BSC";
提取应该在 ".BSC" 之前,".BSC" 将始终存在于原始字符串中。 "\" 和 "\" 也会在那里,但文本会改变。
我必须省略中间部分,我的输出应该是:
"\\hjsschjsn\-56Noogg.BSC";
场景 2:
"\\adajsschjsn\Bcscx.sdjhs\AHHJogg.BSC";
输出应该是:
"\\adajsschjsn\AHHJogg.BSC";
场景 3:
"aasjkankn\\adajsschjsn\Bcscx.sdjhs\AHHJogg.BSC\djkhakdjhjkj";
输出应该是:
"\\adajsschjsn\AHHJogg.BSC";
这是我尝试过的:
string text = "\\\\hjsschjsn\Bunong.PU2.PV/-56Noogg.BSC";
//Note: I have given \\\\ instead of \\ because of string literal to be accomadated in a string
Match pattern = Regex.Match(text, @"\\\\[\w]+\\/[\w*]+.BSC");
【问题讨论】:
您的第一个场景中是否有拼写错误或“/”正斜杠是故意的? @twhetsto: '/' 正斜杠是故意的。 【参考方案1】:尝试以下掩码:
.*(\\\\[^\\]*\\)([^\\\/]+)[\\\/](.*?\.BSC).*
将其替换为 $1$3
Regex reg = new Regex(@".*(\\\\[^\\]*\\)([^\\\/]+)[\\\/](.*?\.BSC).*");
string input = @"\\hjsschjsn\Bunong.PU2.PV/-56Noogg.BSC";
string output = reg.Replace(input, "$1$3");
参见示例here
【讨论】:
【参考方案2】:Match pattern1 = Regex.Match(text, @"\\\\\w+\\");
Match pattern2 = Regex.Match(text, @"\w+.BSC");
Console.WriteLine(pattern1.ToString() + pattern2.ToString());
【讨论】:
感谢您提供此代码 sn-p,它可能会提供一些即时帮助。正确的解释将greatly improve 其教育价值通过说明为什么这是解决问题的好方法,并使其对未来有类似但不相同的问题的读者更有用。请编辑您的答案以添加解释,并说明适用的限制和假设。以上是关于特定模式的正则表达式提取的主要内容,如果未能解决你的问题,请参考以下文章