使用正则表达式从Swift字符串中删除Optional()

时间:2015-01-15 14:29:47

标签: ios iphone regex swift nsregularexpression

我的字符串中有'Optional(someVal)'。我想要一个正则表达式来查找和替换此关键字的所有匹配项并仅替换其中的内部值。我正在做的是......

query = "Insert Into table (Col, Col, Col, Col, Col, Col4, Col4, Col4, Col, AuditStatusId, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col ) Values ('71E3F86A059A40F0B3F7614E08ACD2B9', 1, Optional(4), Optional(6), ' ', '', Optional(40799), 'NULL', NULL, 1, 1, NULL, NULL, NUll, 0, NULL, 1, '', NULL , NULL, 90.0, 100.0, 70.0, 89.99, 0.0, 69.99, 1, 1, '2015-01-15 14:09:34 +0000', 0 )"

并使用正则表达式替换

 query = query.stringByReplacingOccurrencesOfString("(\\Optional(w+))", withString: "$1", options: NSStringCompareOptions.RegularExpressionSearch, range: Range<String.Index> (start: query.startIndex, end: query.endIndex)) 

但即使在目标C中,这也不起作用。任何人都知道如何做到这一点?

修改 我试图通过展开值来克服这一点,但它没有提出我正在寻找的解决方案。我需要的是保持值为'nil'以防万一没有值,并在输入的情况下使用'Optional(val)'中的值。因此,请避免建议展开值。

2 个答案:

答案 0 :(得分:5)

我知道我没有回答你原来的问题,但你的做法会促进不良行为。最好在将值插入查询之前解压缩值。例如,

var optional1: Int? = 10
var optional2: Int?

optional1?.description ?? "NULL" // "10"
optional2?.description ?? "NULL" // "NULL"

答案 1 :(得分:2)

我找到了自己的答案。由于您的所有评论和答案都只显示了展开的值,但如果我有30列,那么我必须提交30个支票或30个具有可选1的语句?。描述? &#34; NULL&#34 ;.虽然我可以将nil替换为NULL,将Optional(value)替换为value,并将正则表达式的单个语句替换为:

在Swift中

query = query.stringByReplacingOccurrencesOfString("\\Optional[(](\\w+)[)]", withString: "$1", options: NSStringCompareOptions.RegularExpressionSearch, range: Range<String.Index> (start: query.startIndex, end: query.endIndex))

并在目标C:

query = [query stringByReplacingOccurrencesOfString:@"\\Optional[(](\\w+)[)]"
                                         withString:@"222"
                                            options:NSRegularExpressionSearch
                                              range:NSMakeRange(0, [query length])];