特定模式的正则表达式提取

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 其教育价值通过说明为什么这是解决问题的好方法,并使其对未来有类似但不相同的问题的读者更有用。请编辑您的答案以添加解释,并说明适用的限制和假设。

以上是关于特定模式的正则表达式提取的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter利用正则表达式提取响应值

正则表达式

[使用正则表达式从python文本中提取特定单词

正则表达式

正则表达式

正则表达是式