c#字符串过滤并使用正则表达式匹配

时间:2016-09-01 20:31:50

标签: c# regex string if-statement filtering

我试图用正则表达式过滤字符串,但我并不熟悉正则表达式,所以我需要一些帮助。此外,我需要检查字符串是否包含特定的正则表达式部分,如输入波纹管示例:

输入(字符串):

"<value1;127.0.0.1:20000;value2;value3>Lorem ipsum dolor sit amet!"

如果存在,则返回以下值:

string val1 = ????; //can't be null or empty, must be at least 3 chars/ints
string val2 = ????; //can be empty string
string val3 = ????; //can be empty string
string ipaddress = ????; // can't be empty
string text = ????; //can be empty string

否则如果不存在则仅返回&#34; lorem ipsum ...&#34;文本:

string text = ????; //can be empty string

首先,我需要检查特定部分 是否存在于完整字符串中。 字符串可以没有该部分。

有人可以解释我怎么能这样做吗?

编辑: (请不要判断,我对正则表达式非常不满) 这是我试过的:

private static bool ifContain(string a)
{
    return Regex.IsMatch(a, @"([a-zA-Z0-9]*)\;([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{5})([a-zA-Z0-9*)\;([a-zA-Z0-9]*)\;([<a-zA-Z0-9]*)");
}

2 个答案:

答案 0 :(得分:0)

丑陋的方式without正则表达式:

var str = "<value1;127.0.0.1:20000;value2;value3>Lorem ipsum dolor sit amet!";

var split = str.Split(';'); 
var split2 = split[3].Split('>');

var val1 = split[0].Split('<')[1];
var ip = split[1];
var val2 = split[2];    
var val3 = split2[0];
var text = split2[1];

如果由于某种原因这些值中的任何一个不存在,您可以使用string.IsNullOrWhiteSpace()函数

进行检查

所以,例如:

var str = "<;;;>";

var split = str.Split(';');

var val1 = split[0].Split('<')[1];

Console.WriteLine(string.IsNullOrWhiteSpace(val1)); //true

答案 1 :(得分:0)

这是一种结合正则表达式和拆分的方法。我没有做任何null / empty / whitespace验证,也没有验证split结果是否包含至少4个元素。这使用捕获组从匹配中选择文本,它只是使用.*盲目地抓取组中的所有文本,其中组用括号定义。

        string txt = "<value1;127.0.0.1:20000;value2;value3>Lorem ipsum dolor sit amet!";
        var rgx = new Regex(@"<(.*)>(.*)");
        var match = rgx.Match(txt);
        // Should check if (match.Success) here and only continue if true
        var entireMatch = match.Groups[0]; // unused
        var firstCaptureGroup = match.Groups[1].Value; // Everything between < >
        var secondCaptureGroup = match.Groups[2].Value; // Everything after < >
        var split = firstCaptureGroup.Split(';');

        string val1 = split[0]; 
        string val2 = split[2]; 
        string val3 = split[3]; 
        string ipaddress = split[1]; 
        string text = secondCaptureGroup;