从文本字符串中删除特定单词? [复制]
Posted
技术标签:
【中文标题】从文本字符串中删除特定单词? [复制]【英文标题】:Removing specific words from a text string? [duplicate] 【发布时间】:2021-05-22 15:07:45 【问题描述】:假设您有一个变量字符串,例如:"Report to Sam.Smith"
使用 Powershell 删除“Report
”和“to
”字样的最佳方法是什么?只留下Sam.Smith
?
【问题讨论】:
请定义“好” - 什么会使一种方法比另一种方法“更好”? 可能是replace
或("Report to Sam.Smith" -split '\s')[-1]
看起来您正在寻找创建一个正则表达式,但不知道从哪里开始。请查看Reference - What does this regex mean 资源,它有很多提示。此外,请参阅 Learning Regular Expressions 帖子了解一些基本的正则表达式信息。一旦您准备好表达方式,但解决方案仍然存在问题,请使用最新的详细信息编辑问题,我们很乐意帮助您解决问题。
@MathiasR.Jessen 这已经很晚了,但是:我所说的“最佳”是指最容易阅读、简单且可能最短的组合。我意识到包含最后一项正则表达式将非常适合该类别。然而,IMO,总的来说,Regex 既不容易阅读也不简单。您过去曾在许多问题上帮助过我,如果出现错误,我们深表歉意。
【参考方案1】:
你必须使用 -replace :
$string = "Report to Sam.Smith"
$string = $string -replace "Report to ",""
$string # Output --> "Sam.Smith"
或者像这样:
$string = "Report to Sam.Smith"
$string = $string.replace("Report to ","")
$string # Output --> "Sam.Smith"
但如果你需要使用正则表达式,因为字符串的单词可能会有所不同,那么你必须重新考虑这个问题。
您不会希望擦除字符串的一部分,而是要从中提取一些内容。
在您的情况下,我认为您正在寻找使用 name.lastname 格式的用户名,这很容易捕获:
$string = "Report to Sam.Smith"
$string -match "\s(\w*\.\w*)"
$Matches[1] # Output --> Sam.Smith
使用 -match 将返回 True / False。
如果返回 True,将创建一个名为 $Matches 的数组。它将在索引 0 ($Matches[0]) 上包含与正则表达式匹配的整个字符串。
其他大于 0 的索引将包含从称为“捕获组”的正则表达式括号中捕获的文本。
我强烈建议使用 if 语句,因为如果您的正则表达式返回 false,则数组 $Matches 将不存在:
$string = "Report to Sam.Smith"
if($string -match "\s(\w*\.\w*)")
$Matches[1] # Output --> Sam.Smith
【讨论】:
正是我需要的,谢谢!我想评论一下这个问题如何与另一个/其他人密切相关。我尝试在 *** 上搜索 .. 发现很多人从带有符号的字符串中删除文本的示例,例如“我想删除之前的所有内容并包括 = 符号”。或者“我需要删除每 3 个字母”,但我发现 没有 像我所要求的那样。因此,任何认为我的问题相似的人都是错误的。感谢 powercat,非常感谢您的帮助 不客气。以上是关于从文本字符串中删除特定单词? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PL/SQL 中的字符串中删除最后 3 个单词? [复制]