使用-match从字符串中提取美元符号和金额

时间:2015-12-30 20:06:35

标签: regex powershell

我匹配字符串:

"this transaction will cost $600" -match "\`$ \d{1,3}"

我希望matches[0]仅匹配值和$符号子字符串:

$600

我错过了什么?

2 个答案:

答案 0 :(得分:1)

不是我猜的最佳方式

$string = 'this transaction will cost $600'

$string -match 'will cost \$(?<content>.*)'

"In `$: $($matches['content'])"

答案 1 :(得分:1)

这里有两个问题。首先是输入字符串。你有一个美元符号,然后是字母数字。 PowerShell将尝试使用变量$600扩展该字符串。据推测,这不存在,并且在您的情况下,将返回null。输入字符串以查看我的意思。

PS C:\Users\stuff> "this transaction will cost $600"
this transaction will cost 

其次,你的正则表达式中的美元之后有空格。这将尝试匹配你没有的“600美元”。需要收紧。

PS C:\Users\stuff> 'this transaction will cost $600' -match "\$\d{1,3}"
True

PS C:\Users\stuff> $Matches[0]
$600

在这种情况下,正则表达式中的美元符号不需要被转义,但是使用单引号可以防止出现错误。如果你真的想要变量扩展那么要小心。您需要使用双引号或使用格式运算符之类的东西。