簡體   English   中英

使用正則表達式替換多個標頭名稱

[英]Replacing multiple header name using regex

我目前正在制作一個可以讀取csv文件並可以使用Regex和csvhelper替換標題名稱的項目。

我有很多csv filse,有時它們具有不同的標頭名稱。 這些是我的示例csv文件:

范例1:

BranchName,Latitude,Longitude
China,89.2422,121.1312

范例2:

Name,Lat,Long
New Zealand,21.1212,110.3141

范例3:

B_Name4,Lati12,Longitude21
Australia,34.1231,143.1231

如何將標題名稱更改為正確的標題名稱? 像這樣:

 Branch_Name,Latitude,Longitude China,89.2422,121.1312 

到目前為止,我的代碼是這樣的:

csv.Reader.Configuration.PrepareHeaderForMatch = header =>
{
var newHeader = Regex.Replace(header, "@([\w]\*name[\w]*)", "Branch_Name", RegexOptions.IgnoreCase);
newHeader = Regex.Replace(header, "@([\w]\*lat[\w]*)", "Latitude", RegexOptions.IgnoreCase);
newHeader = Regex.Replace(header, "@([\w]\*long[\w]*)", "Longitude", RegexOptions.IgnoreCase);

return newHeader;
}

在此代碼中,正則表達式僅替換第一個匹配項。
我知道可以通過使用映射來實現,但是需要手動放置可能的標頭名稱。 我想要的是動態替換標題。

我不是真的“融入” C#,但是在我看來,您需要:

  • 刪除正則表達式中星號左側的反斜杠
  • 在第二個和第三個“替換”操作中,將header替換為newHeader

另外, \\w周圍的方括號不是必需的,因為您沒有測試“以下任何字符”

您的代碼可能類似於:

csv.Reader.Configuration.PrepareHeaderForMatch = header =>
{
    var newHeader = Regex.Replace(header, @"(\w*Name\w*)", "Branch_Name", RegexOptions.IgnoreCase);
    newHeader = Regex.Replace(newHeader, @"(\w*Lat\w*)", "Latitude", RegexOptions.IgnoreCase);
    return Regex.Replace(newHeader, @"(\w*Long\w*)", "Longitude", RegexOptions.IgnoreCase);
}

暫無
暫無

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

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