【问题标题】:Empty field in CSV file (with regex)CSV 文件中的空字段(使用正则表达式)
【发布时间】:2017-01-21 00:44:40
【问题描述】:

我有一个包含这些信息的 CSV 文件:

RIEN;ADRIEN;CECI EST UN EXEMPLE DU RIEN;RIEN;AUTRE VALEUR
VALEUR;RIEN DE CELA N'EST POSSIBLE;ADORIEN;VALEUR;RIEN

当值匹配“RIEN”时,我将设置为空白字段:

;ADRIEN;CECI EST UN EXEMPLE DU RIEN;;AUTRE VALEUR
VALEUR;RIEN DE CELA N'EST POSSIBLE;ADORIEN;VALEUR;

我尝试在https://regex101.com/ 中进行制作和测试,几个正则表达式。我最后的测试是:

(^RIEN)(?=;)|((?=;)(RIEN)(?=;))*|(?=;)(RIEN$)

我只想要“RIEN”值,没有分号

在未来,我喜欢使用 PowerShell 脚本删除数组中包含的所有模式:

        $deleteCharacters = @(
                    "RIEN",
                    "VALUE WITH SPACE"
        )
        foreach ($deleteWord in $deleteWords) {
                    while ($line.Contains($deleteWord)) {
                    $line = $line.Replace($deleteWord, "")
        }

有人帮帮我吗?

问候,

【问题讨论】:

  • $line -replace "[^;]*\bRIEN\b[^;]*", "" - 如果你想删除 0+ 个非;s、一个完整的单词RIEN,再删除 0+ 个非;s。
  • 导入 csv 文件,遍历字段,测试值并在需要时替换它们。正则表达式在这里无关。
  • 谢谢!这是工作:)

标签: regex powershell csv pattern-matching


【解决方案1】:

您可以只用一个正则表达式删除所有不需要的值,甚至无需逐行迭代:

[IO.File]::ReadAllText('c:\path\input.txt') `
     -replace '(^|[;\r\n])\s*(RIEN|"VALUE IN QUOTES"|VALUE WITH SPACES)([;\r\n]|$)',
              '$1$3' | Out-File c:\path\output.txt -encoding UTF8

【讨论】:

    猜你喜欢
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多