一个正则表达式可以提取周围文本的几种数字格式吗?

时间:2012-10-01 22:15:59

标签: regex

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

Regular expression for commonly understandable number formats

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

string:

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

1 个答案:

答案 0 :(得分: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