gpt4 book ai didi

regex - 如何创建使用正则表达式将文本中的字符串替换为制表符的 powershell 脚本

转载 作者:行者123 更新时间:2023-12-02 05:44:23 25 4
gpt4 key购买 nike

我有一个这样的字符串:
"Item 1","Item 2"
我想使用powershell脚本替换它,使其看起来像这样:
Item 1{tab character}Item 2
我有这个:

$text = '"Item 1","Item 2"'
$expr1 = '"([^"]+?)","([^"]+?)"'
$expr2 = "$1\t$2"
$line = [System.Text.RegularExpressions.Regex]::Replace($text, $expr1, $expr2);

但它不起作用。

顺便说一句,是否有关于如何在 Powershell 中处理转义引号和特殊字符的明确引用?我觉得这确实很令人困惑。

.

.

编辑:

我想这样做的原因是我可以将其包装在参数化脚本中并使用参数调用它。脚本(regex-rs.ps1)是这样的:
param
(
[string] $text,
[string] $inputPattern,
[string] $replacePattern
)

function Main()
{
$text2 = [System.Text.RegularExpressions.Regex]::Replace($text, $inputPattern, $replacePattern);
[System.Console]::WriteLine($text2);
}

Main;

不幸的是,当我这样调用脚本时:
powershell .\regex-rs.ps1 '"Text1","Text2"' '`"([^`"]+?)`",`"([^`"]+?)`"' '`$1`t`$2'

它输出:
Text1,Text2

换句话说,没有标签。我究竟做错了什么?

.

.

进一步编辑以回应下面尼克的回答: (我必须把它放在这里,因为 StackOverflow 中的注释格式与反引号混淆)

我在 powershell 调用中用双引号替换了单引号,如下所示:
powershell .\regex-rs.ps1 ""Text1","Text2"" "`"([^`"]+?)`",`"([^`"]+?)`"" "`$1`t`$2"

但我收到了这个错误:
Missing ] at end of type token.

任何进一步的想法?

.

最终编辑:这是对修复问题的脚本的调用(必须作为图像发布,因为它非常强大,以至于它无视 StackOverflow 的格式,即使在这里也是如此):
.

final script call

最佳答案

您做错的是在“单引号字符串”中使用转义字符 (`)。单引号字符串被视为文字。您需要使用“双引号”才能正常工作:

$text = '"Item 1","Item 2"'
$expr1 = '"([^"]+?)","([^"]+?)"'
$expr2 = "`$1`t`$2"
$line = [System.Text.RegularExpressions.Regex]::Replace($line, $expr1, $expr2);

- 编辑 ——

我只在 $expr2 中用双引号替换了单引号。您遇到了问题,因为您在 $text 和 $expr1 中用双引号替换了单引号,但没有转义字符串中的引号字符。

$text 可以像这样使用单引号:
$text = '"Text1","Text2"'

或者像这样的双引号(转义字符串中的“):
$text = "`"Text1`",`"Text2`""

$expr1 可以像这样使用单引号:
$expr1 = '"([^"]+?)","([^"]+?)"'

或者像这样的双引号:
$expr1 = "`"([^`"]+?)`",`"([^`"]+?)`""

而 $expr2 应该只使用这样的双引号:
$expr2 = "`$1`t`$2"

- 再次编辑 ——

实际上,我现在对您的问题并不乐观。我知道我最初在 powershell 中发布的那 4 行。我从我的答案中复制了它们并将它们粘贴到 powershell 控制台中并且它起作用了。将字符串作为参数传递给我不知道的脚本,我现在无法测试它。但是尝试我添加的内容,看看会发生什么。

- 编辑 3 ——

这有效,但我不知道为什么 ^ 必须第二次重复。如果我只有 1 ^ 它不会出现在字符串中,所以它不会匹配,但是如果我将它加倍,它就可以完美地工作。不知道为什么 ^ 需要在一个地方加倍而不是在另一个地方加倍。
powershell .\regex.ps1 '\"Test1\",\"Test2\"' '\"([^"]+?)\",\"([^^\"]+?)\"' "`$1`t`$2"

在 powershell 中,如果要使用转义字符,则必须使用双引号字符串并使用反引号 (`) 来转义它们。在第一个和第二个字符串的命令行中,我必须使用单引号并使用反斜杠 (\) 来转义 "字符。出于某种原因,在第二个参数中,第二个 ^ 需要重复两次才能实际出现在字符串中。我不知道为什么。对于第三个参数,当字符串传递到 powershell 脚本时,我必须再次使用反引号 ` 以使字符串正常工作。

我责怪微软处理高度不一致的字符串。

关于regex - 如何创建使用正则表达式将文本中的字符串替换为制表符的 powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com