我正在尝试从字符串中获取£值的所有实例。例如the offer would be from £12,000 to £15,000.05 over 6 years with the allowance of 32 extras
会返回12,000
和15,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正在成为一个空阵列。
任何帮助都会非常感激。
答案 0 :(得分:1)
答案 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#">
编辑:我忘了考虑小数,修复。