如何使用正则表达式从字符串中删除下面的模式?

时间:2015-07-25 14:59:05

标签: c# .net regex visual-studio-2010

我有一个字符串,其中包含单词“TAG”,后跟整数,下划线和另一个单词。

例如:“TAG123_Sample”

我需要剪切“TAGXXX_”模式并仅获取单词Sample。意思是我将不得不剪切单词“TAG”和整数后跟和下划线。

我编写了以下代码,但它不起作用。我做错了什么?我怎样才能做到这一点?请指教。

Private Sub UserForm_Initialize()
    Me.ComboBox1.AddItem ("Badge 1")
    Me.ComboBox1.AddItem ("Badge 2")
    Me.ComboBox1.AddItem ("Badge 3")
    Me.ComboBox1.AddItem ("Badge 4")
End Sub

Private Sub Generate_Click()
    If ComboBox1.Value = "Badge 1" Then B1
    If ComboBox1.Value = "Badge 2" Then B2
    If ComboBox1.Value = "Badge 3" Then B3
    If ComboBox1.Value = "Badge 4" Then B4
End Sub

Sub B1()
    Dim s As Shape
    Dim w As Double
    Dim h As Double

    ActiveLayer.CreateEllipse w, h
End Sub

4 个答案:

答案 0 :(得分:3)

您目前正在否定(匹配 NOT 一个数字),您需要修改正则表达式,如下所示:

String s = "TAG123_Sample";
String r = Regex.Replace(s, @"TAG\d+_", "");
Console.WriteLine(r); //=> "Sample"

<强>解释

TAG      match 'TAG'
 \d+     digits (0-9) (1 or more times)
 _       '_'

答案 1 :(得分:1)

您可以使用String.Split

string[] s = "TAG123_Sample".Split('_');
Console.WriteLine(s[1]);

https://msdn.microsoft.com/en-us/library/b873y76a.aspx

答案 2 :(得分:1)

尝试这种情况肯定会在这种情况下起作用:

resultString = Regex.Replace(sentence , 
    @"^   # Match start of string
    [^_]* # Match 0 or more characters except underscore
    _     # Match the underscore", "", RegexOptions.IgnorePatternWhitespace);

答案 3 :(得分:1)

如果你的字符串包含1个下划线而你需要获得一个子字符串,则不需要正则表达式。

这是基于Substring + IndexOf的方法:

var res = sentence.Substring(sentence.IndexOf('_') + 1); // => Sample

请参阅IDEONE demo