2017-06-12 71 views
0

如果该值没有小数,则“myDRange”语句将返回一个范围,如果有小数,则返回nil。其他语句按预期返回范围什么我做错了swift3 String.range(of:returns nil

Swift3 - myDRange返回nil

var pseudoXML = "<d>4.0</d><rs>Test</rs><o>0</o>" 
let myDRange = pseudoXML.range(of: "(?<=<d>)[^.]+(?=</d>)", options: .regularExpression) 
let myRSRange = pseudoXML.range(of: "(?<=<rs>)[^.]+(?=</rs>)", options: .regularExpression) 
let myORange = pseudoXML.range(of: "(?<=<o>)[^.]+(?=</o>)", options: .regularExpression) 

Swift3 - myDRange返回一

var pseudoXML = "<d>40</d><rs>Test</rs><o>0</o>" 
let myDRange = pseudoXML.range(of: "(?<=<d>)[^.]+(?=</d>)", options: .regularExpression) 
let myRSRange = pseudoXML.range(of: "(?<=<rs>)[^.]+(?=</rs>)", options: .regularExpression) 
let myORange = pseudoXML.range(of: "(?<=<o>)[^.]+(?=</o>)", options: .regularExpression) 

TIA

回答

0

@CMan,

为了您myDRange需求而努力,请使用以下正则表达式 “(?<=<d>)([0-9](\\.[0-9]))+(?=</d>)

这将解决您的问题,零为myDRange

样品你的工作代码:

var pseudoXML = "<d>4.0</d><rs>Test</rs><o>0</o>" 
let myDRange = pseudoXML.range(of: "(?<=<d>)([0-9](\\.[0-9]))+(?=</d>)", options: .regularExpression) 
let myRSRange = pseudoXML.range(of: "(?<=<rs>)[^.]+(?=</rs>)", options: .regularExpression) 
let myORange = pseudoXML.range(of: "(?<=<o>)[^.]+(?=</o>)", options: .regularExpression) 
+0

谢谢Kalyani。你的回答让我朝着正确的方向前进。如果数字中有一个小数,它会工作。但是,可能会或可能不会。但我接受了你的评论并做了一些进一步的研究。对于myDRange,正则表达式应该是“(?<=)([0-9,\\。,0-9])* +(?=)”,这将返回标记之间的数字是否与有一个小数。 – CMan