coldfusion - 如何使用正则表达式从字符串中获取所有£值

时间:2014-10-03 11:27:14

标签: regex coldfusion

我正在尝试从字符串中获取£值的所有实例。例如the offer would be from £12,000 to £15,000.05 over 6 years with the allowance of 32 extras

会返回12,00015,000.05

我认为我希望正则表达式说'获得£和white space之间的所有值'或者'获得数字之间的所有值,然后可能有也可能没有。然后可能有或没有其他数字,那么就会有空格'

我发现了这个Extract dollar amount from string - regex in PHP

我已经变成了:

<cfset mystring = 'the offer would be from £12,000 to £15,000.05 over 6 years with the allowance of 32 extras'>

<cfset valuesfound = rematch('/\£([0-9]+[\.]*[0-9]*)/', mystring) >

但是alas valuesfound正在成为一个空阵列。

任何帮助都会非常感激。

4 个答案:

答案 0 :(得分:1)

  

我希望正则表达式说“获得£和空格之间的所有值”

£(\S+)

DEMO

OR

(?<=£)\S+

+将重复前一个字符一次或多次,因此您无法在数组列表中获取任何空字符串。

DEMO

答案 1 :(得分:0)

用于捕获数字的松散正则表达式将是:

£(\d[\d,.]*)

该数字可用于捕获第1组。

这只是检查英镑符号后面有一个数字,其余的可以是任意数字的数字或小数点.或千位分隔符,

请注意,上面的正则表达式可以匹配£3.5,5.2£3...,,,,2£3.£3,。但至少,这比将£-sign作为匹配更合理。

上面的松散正则表达式仅用于提取信息。不要用它来验证。

如果你想要一个更强大的正则表达式:

£((?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?)

这个正则表达式可以匹配的最疯狂的事情的例子:

£1
£0000
£0000.00000
£0.33
£0.234235234
£0001340590783445
£0.4
£234,444.2344
£789
£59.2

千分隔符是可选的,如果它在那里,它必须将整个部分分成3个组。小数部分是可选的,允许任意位数。

答案 2 :(得分:0)

(?<=£)\d+(,?\d{3})*(\.\d+)?

这只会匹配格式正确的数字。 See demo.

说明:

(?<=£) # assert there's a "£" here
\d+ # consume as many digits as possible
(,?\d{3})* # consume a "," followed by exactly 3 digits, any number of times.
(\.\d+)? # finally, match "." followed by at least one digit - if possible.

答案 3 :(得分:0)

<cfset mystring = 'the offer would be from £12,000 to £15,000.05 over 6 years with the allowance of 32 extras'>
<cfset valuesfound2 = ReMatch("(\£[0-9,\.]*)", mystring)>
<cfdump var="#valuesfound2#">

编辑:我忘了考虑小数,修复。