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

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,

我有一个大的文本文件,其中包含以.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
。对另一个好答案的狡辩。;-)