【问题标题】: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: '/' 正斜杠是故意的。

标签: c# .net regex c#-4.0


【解决方案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 其教育价值通过说明为什么这是解决问题的好方法,并使其对未来有类似但不相同的问题的读者更有用。请编辑您的答案以添加解释,并说明适用的限制和假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多