我试图从.pdf文件重新格式化电话号码目录。
我提取了所有文字,所有电话号码都采用这种格式( 555 ) 555 - 555
我想将它们放在5555555555
中,然后是<br>
我想过
#ReReplace(Directory, "\(.*?.\).*?.\-.*?", "", "all")#
但它离开了空格,我无法获得<br>
。
我走错了路吗?
是否可以使用Rematch返回一个将字符串拆分为
的数组["some string ( 555 ) 555 - 555", "some string ( 555 ) 555 - 555", "some string ( 555 ) 555 - 555"]
答案 0 :(得分:2)
试试这个 - 使用捕获组和反向引用,我们可以提取数字
#ReReplace(Directory, "\(\s*(\d+)\s*\)\s*(\d+)\s*-\s*(\d+)", "\1\2\3<br>", "all")#
答案 1 :(得分:1)
我有点希望有人会有更好的解决方案,但
你可以这样做来将匹配加载到数组中,用值后缀(我选择“ENDPN”)并使用带有ReMatch的前瞻来检查后缀,这样它就不会随机拾取10数字串。 CF(至少10个)本身不支持lookbehinds,但它确实支持前瞻。您可以调用Java来执行此操作,但这里没有必要。
Lookaheads允许您断言模式在表达式之后(向前看),而不捕获它。 Lookbehinds允许在字符串之前检查支持它的语言,例如Java。
如果没有其他10位数字符串的危险,所有这些都是不必要的。
<cfset Directory = '["some string ( 555 ) 555 - 5768", "some string ( 555 ) 555 - 1234", "some string ( 555 ) 555 - 0101"]'>
<cfset ParseNums = ReReplace(Directory, "\(\s*(\d{3})\s*\)\s*(\d{3})\s*-\s*(\d{4})", "\1\2\3ENDPN", "all")>
<cfset ArrNums = ReMatch("\d{10}(?=ENDPN)",ParseNums)>
<cfdump var="#ArrNums#">
如果您仍想在捕获中使用<br />
。
<cfset Directory = '["some string ( 555 ) 555 - 5768", "some string ( 555 ) 555 - 1234", "some string ( 555 ) 555 - 0101"]'>
<cfset ParseNums = ReReplace(Directory, "\(\s*(\d{3})\s*\)\s*(\d{3})\s*-\s*(\d{4})", "\1\2\3<br />ENDPN", "all")>
<cfset ArrNums = ReMatch("\d{10}<br \/>(?=ENDPN)",ParseNums)>
<cfdump var="#ArrNums#">