Regex 文本操作问题-如何在已知值后替换文本
我有一个大的文本文件,其中包含以.txt结尾的文件名 文件的某些行在文件扩展名后有不需要的文本。 我正试图找到一种方法来搜索+替换或修剪整个文件,这样,如果发现一行带有.txt,那么后面的任何内容都会被删除。范例 C:\Test1.txt C:\Test2.txtHelloWorld这是我的 问题 C:\Test3.txt 1234.r 期望结果 C:\Test1.txt C:\Test2.txt C:\Test3.txt 我试过使用notepad++,或者使用batch/powershell,但很接近,没有雪茄Regex 文本操作问题-如何在已知值后替换文本,regex,text,powershell,file-manipulation,Regex,Text,Powershell,File Manipulation,我有一个大的文本文件,其中包含以.txt结尾的文件名 文件的某些行在文件扩展名后有不需要的文本。 我正试图找到一种方法来搜索+替换或修剪整个文件,这样,如果发现一行带有.txt,那么后面的任何内容都会被删除。范例 C:\Test1.txt C:\Test2.txtHelloWorld这是我的 问题 C:\Test3.txt 1234.r 期望结果 C:\Test1.txt C:\Test2.txt C:\Test3.txt 我试过使用notepad++,或者使用batch/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
等
但是,
匹配任何字符。这意味着,*
匹配任何内容中的0个或多个,这是您想要的。正因为如此,我还逃过了.txt
中的
,因为它可能会破坏文件名,如:alovelytxtfile.txt
,该文件名将被修剪为alovel.txt
有关详细信息,请参阅:
,则会导致返回的示例文件名为alovel.txt
,而不是alovelytxt
。对另一个好答案的狡辩。;-)