我试图用正则表达式过滤字符串,但我并不熟悉正则表达式,所以我需要一些帮助。此外,我需要检查字符串是否包含特定的正则表达式部分,如输入波纹管示例:
输入(字符串):
"<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]*)");
}
答案 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;