0

这是我的问题。这里建议的对话非常接近地回答了我的问题,但我仍然需要帮助来对其进行一些调整。

常用数字格式的正则表达式

一个正则表达式可以实现这一点吗?

细绳 :

texta wordb 1234 wordc textd
texta wordb $1234 wordc textd
texta wordb 1,234 wordc textd
texta wordb 1234.12 wordc textd

如果这是上面的一根巨大的字符串。我想将 [数字前的单词] + [数字] 和 [数字后的单词] 提取到数组中,如下所示:

wordb 1234 wordc
wordb $1234 wordc
wordb 1,234 wordc
wordb 1234.12 wordc
4

1 回答 1

0

你当然可以:

(\p{L}+)\s([\d$,.]+)\s(\p{L}+)

或者,更简单,但可能得到更广泛的支持:

([a-zA-Z]+)\s([\d$,.]+)\s([a-zA-Z]+)

这实际上是抓取一堆字母,然后是一些空格,然后是一个可能还包含字符 $、逗号和点的数字(如果需要,根据您的期望扩展)和另一堆字母。

如果您不需要单独的部分,您可以去掉括号,只取完整的匹配项。否则,您想要的零件在第 1-3 组中。

快速 PowerShell 测试:

PS> $re = '(\p{L}+)\s([\d$,.]+)\s(\p{L}+)'
PS> $tests = 'texta wordb 1234 wordc textd
>> texta wordb $1234 wordc textd
>> texta wordb 1,234 wordc textd
>> texta wordb 1234.12 wordc textd' -split "`n"
>>
PS> $tests | %{ $null = $_ -match $re; Write-Host Word 1: $Matches[1], Number: $Matches[2], Word 2: $Matches[3] }
Word 1: wordb Number: 1234 Word 2: wordc
Word 1: wordb Number: $1234 Word 2: wordc
Word 1: wordb Number: 1,234 Word 2: wordc
Word 1: wordb Number: 1234.12 Word 2: wordc
于 2012-10-01T22:20:32.737 回答