[英]Extract string with regex in C#
我在C#中有此字符串:“ / 19 / Ora01”,我想吸引“ Ora01”
我嘗試沒有成功:
var pattern = @"^(Ora[0-9]{2})$";
var match = Regex.Match(args.Path, pattern);
var hour = match.Groups[0].Value;
我做錯了什么?
怎樣吸引另外兩個字符串,一個帶有19,另一個帶有Ora01?
如果您將/
Split()
/
Split()
/
如果字符串為/19/Ora01
模式,該/19/Ora01
var data = "/19/Ora01".Split("/", StringSplitOptions.RemoveEmptyEntries);
這是正則表達式要的:
public static void Main(string[] args)
{
string pattern = "\\/(.*?)\\/(.+)";
string text = "/19/Ora01";
Match match = Regex.Match(text, pattern);
string first = match.Groups[1].Value;
string second = match.Groups[2].Value;
Console.WriteLine(first);
Console.WriteLine(second);
Console.ReadLine();
}
還考慮拉胡爾提供的答案。
^
表示“字符串的開頭”,“ $”表示“字符串的結尾。”您要求的內容僅包含Ora
后跟兩位數字。至少刪除^。您也不需要分組Ora[0-9]{2}
應該工作:
var pattern = @"Ora[0-9]{2}";
var match = Regex.Match("/19/Ora01", pattern);
var hour = match.Groups[0].Value;
hour.Dump();
打印Ora01
。
如果您想要在Ora
之后的小時部分,則必須將數字分組:
var pattern = @"Ora(?<hour>[0-9]{2})";
var match = Regex.Match("/19/Ora01", pattern);
var hour = match.Groups["hour"].Value;
Console.WriteLine(hour);
打印:
01
您無需說明要執行哪種驗證,例如,斜杠是否重要,是否應存在19
斜杠,例如將其視為一年。
如果要確保字符串遵循此格式,並且第一部分是兩位數字,則可以使用例如@"/(?<year>\\d{2})/Ora(?<hour>\\d{2})"
:
var pattern = @"/(?<year>\d{2})/Ora(?<hour>\d{2})";
var match = Regex.Match("/19/Ora01", pattern);
var hour = match.Groups["hour"].Value;
var year = match.Groups["year"].Value;
Console.WriteLine($"{year} {hour}");
打印:
19 01
僅當格式正確時。
在正則表達式中, ^
表示從字符串開頭開始匹配。
就像$
表示匹配到字符串的結尾。
只需從您的模式中刪除^
,您的代碼就可以工作。
正則表達式是執行此操作的最佳方法:
string pattern = "\\/(.*?)\\/(.+)";
string text = "/19/Ora01";
Match match = Regex.Match(text, pattern);
string first = match.Groups[1].Value;
string second = match.Groups[2].Value;
Console.WriteLine(first);
Console.WriteLine(second);
另外,@ Panagiotis Kanavos可能是最好的答案,也是最完整的答案。
您也可以使用string.Split。 可能比regex更快,但要取決於您的需求。
使用string.Split可能看起來像
var result = start.Substring(start.LastIndexOf("/") + 1);
如果要使用正則表達式,則必須刪除“ ^”。 為便於測試和更多信息,請訪問regexr.com。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.