文本操作问题-如何在已知值之后替换文本



我有一个大的文本文件,其中包含以.txt结尾的文件名文件的某些行在文件扩展名之后有不需要的文本。我正试图找到一种方法来搜索+替换或修剪整个文件,以便如果一行被发现与。txt,这之后的任何东西都被简单地删除。示例

C: Test1.txt

C: Test2。这是我的问题

C: Test3.txt_ _ __ _Annoyingstuff1234 r

想要的结果

C: Test1.txt

C: Test2.txt

C: Test3.txt

我试过用notepad++,或者使用批处理/powershell,但是很接近,没有雪茄。

(Get-Content "D:checkthese.txt") | 
Foreach-Object {$_ -replace '.txt*', ".txt"} | 
Set-Content "D:CLEAN.txt"

我的想法是,如果我在。txt之后替换任何东西(通配符*),那么我会修剪掉我需要的东西,但这不起作用。我想我需要使用正则表达式,但我有语法错误。

只需将*更改为.*,如下所示:

(Get-Content "D:checkthese.txt") | 
Foreach-Object {$_ -replace '.txt.*', ".txt"} | 
Set-Content "D:CLEAN.txt"

在正则表达式中,*表示"0次或多次",在这种情况下,它将作用于.txt的最后t,因此.txt*只匹配.tx, .txt, .txtt, .txttt等…

然而,

.匹配任何字符。这意味着,.*匹配0或更多的任何东西,这就是您想要的。因此,我也在.txt中转义了.,因为它可能会在像:alovelytxtfile.txt这样的文件名上中断,它将被修剪为alovel.txt

有关更多信息,请参见:

  • Regex教程- .
  • 正则表达式教程- *

相关内容

  • 没有找到相关文章

最新更新