使用正则表达式替换多个标题名称

Posted

技术标签:

【中文标题】使用正则表达式替换多个标题名称【英文标题】:Replacing multiple header name using regex 【发布时间】:2019-04-15 00:28:58 【问题描述】:

我目前正在制作一个可以读取 csv 文件并可以使用 Regex 和 csvhelper 替换标题名称的项目。

我有很多 csv 文件,有时它们有不同的标题名称。这些是我的示例 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;

在此代码中,正则表达式仅替换第一个匹配项。 我知道使用映射是可能的,但它需要手动放置可能的标题名称。我想要的是动态替换标题。

【问题讨论】:

【参考方案1】:

我并不是真的“喜欢”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);

【讨论】:

以上是关于使用正则表达式替换多个标题名称的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式但以另一种格式替换文件的相同名称?

组合多个正则表达式替换

正则表达式替换:匹配中的多个替换

在多个文件中查找和替换正则表达式的最佳工具是啥?

如何在 pySpark 中有效地从字符串数据框中替换多个正则表达式模式的所有实例?

使用 Vim 的正则表达式替换多个文件的单词在 sed 中无法按预期工作