簡體   English   中英

C#字符串過濾和正則表達式匹配

[英]c# String filtering and split with regex match

我正在嘗試使用正則表達式過濾字符串,但是我對正則表達式並不熟悉,因此我需要一點幫助。 我還需要檢查字符串是否包含特定的正則表達式部分,例如輸入波紋管的示例:

輸入(字符串):

"<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

否則,如果不存在,則僅返回“ lorem ipsum ...”文本:

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]*)");
}

without Regex的丑陋方式:

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

這是將正則表達式和拆分結合在一起的方法。 我沒有執行任何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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM