我可以从字符串的已知位置开始到给定字符结束时删除子字符串吗?

时间:2019-01-07 22:40:11

标签: string powershell replace substring

我需要提取字符串的各个部分,但我并不总是知道长度/内容。

例如,我曾尝试将字符串转换为XML或JSON,但无法提出其他方法来实现我想要的功能。

示例字符串:

'Other parts of the string Name="SomeRandomAmountOfCharacters" blah blah'

我需要删除的内容始终以属性名称开头,并以双引号结尾。所以我可以说我想删除以Name =“开头的子字符串,直到我们到达结尾处的“?”

预期结果:

'Other parts of the string blah blah'

3 个答案:

答案 0 :(得分:1)

您想要做这样的事情

$s = 'Other parts of the string Name="SomeRandomAmountOfCharacters" blah blah'
$s -replace ' Name=".*?"'

或类似这样:

$s = 'Other parts of the string Name="SomeRandomAmountOfCharacters" blah blah'
$s -replace ' Name="[^"]*"'

避免在包含多个属性或附加双引号的情况下无意删除字符串的其他部分。 .*?是除换行符以外的任何字符序列的非贪婪匹配,因此它将匹配下一个双引号。 [^"]*是一个字符类,它匹配不是双引号的最长连续字符序列,因此也将匹配下一个双引号。

如果您有多行字符串,您还想将其他构造(?ms)添加到表达式中。

答案 1 :(得分:0)

这里是一个很好的参考:https://www.regular-expressions.info/powershell.html

以您的情况

$s = 'Other parts of the string Name="SomeRandomAmountOfCharacters" blah blah'
$s -replace '\W*Name=".*"\W*', " "

$newString = $s -replace 'W*Name=".*"\W*', " "

这会将您的匹配字符串(包括周围的空格)替换为一个空格。

答案 2 :(得分:0)

看看这样的东西,并了解其工作原理。

System.out.println()

另请参阅:https://regex101.com/r/wM2xlc/1