[英]Using Regex.Split in c#
所以我有一個包含雪花列的字符串,我想將字符串拆分為每一列,我正在嘗試使用 Regex 來執行此操作,因為拆分字符串在這種情況下不起作用。 我試過的字符串模式是
string pattern = @"([^\s]*\s[^\s]*),"
盡管此模式在第二個連續空格后分裂。 我不確定如何在別名之后拆分它。 我也在使用 .net 核心 3.1。 任何幫助,將不勝感激..
當前雪花數據列字符串:
string columns = "nvl(u.\"Country\",'#N/A') \"Country\",u.\"CreatedDate\" \"CreatedDate\",nvl(u.\"Email\",'#N/A') \"Email\",u.\"LastModifiedDate\" \"LastModifiedDate\",nvl(u.\"Name\",'#N/A') \"Name\"";
預計 output:
nvl(u."國家",'#N/A') "國家"
u."創建日期" "創建日期"
nvl(u."電子郵件",'#N/A') "電子郵件"
u."LastModifiedDate" "LastModifiedDate"
nvl(u."姓名",'#N/A') "姓名"
您可以使用
string[] result = Regex.Split(text, @"(?<=\s""\w+""),");
請參閱.NET 正則表達式演示。 詳情:
(?<=\s"\w+")
- 正向后視匹配緊跟在空格前面的位置, "
,一個或多個單詞字符, "
,
- 逗號。另一個想法是提取匹配項
var result = Regex.Matches(text, @"\b(?:nvl\([^()]*\)|u\.""[^""]*"")\s+""[^""]*""")
.Cast<Match>()
.Select(x => x.Value);
請參閱此正則表達式演示。
詳情:
\b
- 單詞邊界(?:nvl\([^()]*\)|u\."[^"]*")
- nvl(...)
或u."..."
\s+
- 一個或多個空格"[^"]*"
- "
,零個或多個非"
s,和一個"
。您可以使用捕獲組(第 1 組)並在匹配空格后排除第二部分中的逗號。 要匹配所有部分,您可以匹配模式末尾的逗號或字符串末尾。
這部分[^\s]*
可以寫成\S*
(\S*\s[^\s,]*)(?:,|$)
(
捕獲組 1
\S*\s[^\s,]*
匹配可選的非空白字符,匹配空白字符並匹配可選的非空白字符,comme 除外)
關閉組 1(?:,|$)
匹配逗號或斷言字符串結尾例如
string pattern = @"(\S*\s[^\s,]*)(?:,|$)";
string input = @"nvl(u.""Country"",'#N/A') ""Country"",u.""CreatedDate"" ""CreatedDate"",nvl(u.""Email"",'#N/A') ""Email"",u.""LastModifiedDate"" ""LastModifiedDate"",nvl(u.""Name"",'#N/A') ""Name""";
foreach (Match m in Regex.Matches(input, pattern))
{
Console.WriteLine(m.Groups[1].Value);
}
Output
nvl(u."Country",'#N/A') "Country"
u."CreatedDate" "CreatedDate"
nvl(u."Email",'#N/A') "Email"
u."LastModifiedDate" "LastModifiedDate"
nvl(u."Name",'#N/A') "Name"
使用+
匹配 1 個或多個字符並匹配雙引號之間的單詞字符的更具體的模式:
(\S+\s"\w+")(?:,|$)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.