Ios Swift-替换字符串中的多个未知字符
我希望在Swift中运行一个快速函数来更改字符串的某些方面 目标:获取输入字符串[UITextField],并将所有标点符号替换为空格(.)或(?),仅标点符号本身位于字符串中 问题:我不知道标点符号是什么。有一个UITextField供用户输入。此文本字段也用于其他函数 示例: 输入:你好,你好吗?我很好。非常感谢。 输出:你好,你好吗?我很好。谢谢 测试代码:如果您想在浏览器中测试,我还有一个(JSFIDLE for Swift)Ios Swift-替换字符串中的多个未知字符,ios,swift,Ios,Swift,我希望在Swift中运行一个快速函数来更改字符串的某些方面 目标:获取输入字符串[UITextField],并将所有标点符号替换为空格(.)或(?),仅标点符号本身位于字符串中 问题:我不知道标点符号是什么。有一个UITextField供用户输入。此文本字段也用于其他函数 示例: 输入:你好,你好吗?我很好。非常感谢。 输出:你好,你好吗?我很好。谢谢 测试代码:如果您想在浏览器中测试,我还有一个(JSFIDLE for Swift) var inputText = "hello, how ar
var inputText = "hello, how are you doing? I am okay. Thanks." // User input from UITextField
var newString: String! // Setting string for global variable
var punctuation: String = "" // Starts as blank, could remain empty
punctuation = "?.," // Dont know what this will be. Input from UITextField
var characters = Array(punctuation)
println(characters) //Testing in console
//Current idea but does not work as needed
func replacePunctuationSpace() -> String{
for character in characters{
newString = inputText.stringByReplacingOccurrencesOfString("\(character) ", withString: "\(character)")
println("Replacing \(character) ... \(newString)")
}
return newString
}
replacePunctuationSpace()
//Only replaces last item in array
println(newString)
如果有什么不合理的地方,请告诉我
谢谢你的帮助。
Eric这可以(例如)通过NSScanner
实现。以下
代码应该是自我解释的:)
这可以(例如)通过NSScanner
实现。以下
代码应该是自我解释的:)
您应该能够使用NSRegularExpression和类似的方法
替换匹配安装:选项:范围:带模板:
我不是正则表达式方面的专家。我相信您可以让正则表达式有两个“捕获组”,其中第一个捕获组是可能的标点字符列表,第二个是可变数量的空白。您的模板将告诉`replaceMatchesInstalling:options:range:withTemplate:函数将每个匹配的表达式替换为第一个捕获组的内容(匹配的标点符号)
您需要列出所有要处理的标点符号(例如“,:?!;”)
编辑:
我决定将此作为一次学习经验,以进一步了解正则表达式
我发现这是对正则表达式的一个不错的介绍
然后,我阅读了NSRegularExpression上的文档,特别是stringbyreplacingmatcheinstall
函数。也就是说,字符串是基于“模板”替换的
正则表达式的各个部分似乎可以划分为“捕获组”,或单独匹配的部分。然后,您可以使用这些捕获组将匹配字符串的一部分用于stringByReplacingMatchesInString的输出
下面是我编写的一些操场代码,它搜索标点符号“,.:;?!”后跟一个或多个空白字符,并将其替换为标点符号,去掉空白:
var error: NSError?
let myRegEx = NSRegularExpression(pattern: "([,.:;?!])(\\s*)",
options: NSRegularExpressionOptions(0),
error: &error)
let testString = "This is a string, with some text. It has punctuation; can we replace that punctuation? I need to know what happens! "
let range = NSRange(location: 0, length: count(testString))
println(testString)
if let newString = myRegEx?.stringByReplacingMatchesInString(
testString,
options: NSMatchingOptions(0),
range: range,
withTemplate: "$1")
{
println("Result string = \(newString)")
}
else
{
println("No matches")
}
显然,您是通过将正则表达式的一部分括在括号中来创建捕获组的。所以我定义了一个包含两个捕获组的正则表达式。第一个捕获组是“字符类”,表示任何标点符号:,.:代码>。正则表达式的这一部分如下所示:([,.:;?!])
第二个捕获组匹配任意数量的空白字符。空白的特殊“字符类”是\s
。但是,Swift字符串也使用反斜杠进行转义,因此为了在正则表达式中获得文本反斜杠,我必须将其写成\\s
。将其放在括号中会将其转换为捕获组:(\\s)
在调用stringbyreplacingmatcheinstall
时,正则表达式是([,.:;?!])(\\s*)
,模板字符串是“$1”
这意味着:
匹配由标点符号字符后跟零个或多个空白字符组成的字符串。将每个匹配的标点符号放在“捕获组”1中,空白放在“捕获组2”中
用捕获组1(标点符号)的内容替换每个匹配项
这样做的效果是从捕获组2中丢弃空白,从而除去指定标点符号后的空白。您应该能够使用NSRegularExpression和类似的方法
替换匹配安装:选项:范围:带模板:
我不是正则表达式方面的专家。我相信你可以让你的正则表达式有2个“捕获组”其中,第一个捕获组是可能的标点符号列表,第二个捕获组是可变数量的空白。您的模板将告诉`replaceMatchesInstalling:options:range:withTemplate:函数将每个匹配的表达式替换为第一个捕获组的内容(匹配的标点符号)
您需要列出所有要处理的标点符号(例如“,:?!;”)
编辑:
我决定将此作为一次学习经验,以进一步了解正则表达式
我发现这是对正则表达式的一个不错的介绍
然后,我阅读了NSRegularExpression上的文档,特别是stringbyreplacingmatcheinstall
函数。也就是说,字符串是基于“模板”替换的
正则表达式的各个部分似乎可以划分为“捕获组”,或单独匹配的部分。然后,您可以使用这些捕获组将匹配字符串的一部分用于stringByReplacingMatchesInString的输出
下面是我编写的一些操场代码,它搜索标点符号“,.:;?!”后跟一个或多个空白字符,并将其替换为标点符号,去掉空白:
var error: NSError?
let myRegEx = NSRegularExpression(pattern: "([,.:;?!])(\\s*)",
options: NSRegularExpressionOptions(0),
error: &error)
let testString = "This is a string, with some text. It has punctuation; can we replace that punctuation? I need to know what happens! "
let range = NSRange(location: 0, length: count(testString))
println(testString)
if let newString = myRegEx?.stringByReplacingMatchesInString(
testString,
options: NSMatchingOptions(0),
range: range,
withTemplate: "$1")
{
println("Result string = \(newString)")
}
else
{
println("No matches")
}
显然,您是通过将正则表达式的一部分括在括号中来创建捕获组的。所以我定义了一个包含两个捕获组的正则表达式。第一个捕获组是“字符类”,表示任何标点符号:,.:代码>。正则表达式的这一部分如下所示:([,.:;?!])
第二个捕获组匹配任意数量的空白字符。那个
var inputText = "hello, how are you doing? I am okay. Thanks." // User input from UITextField
var newString: String! // Setting string for global variable
var punctuation: String = "" // Starts as blank, could remain empty
punctuation = "?.," // Dont know what this will be. Input from UITextField
var characters = Array(punctuation)
println(characters) //Testing in console
//Current idea but does not work as needed
func replacePunctuationSpace() -> String {
newString = inputText
for character in characters{
newString = newString.stringByReplacingOccurrencesOfString("\(character) ", withString: "\(character)")
println("Replacing \(character) ... \(newString)")
}
return newString
}
replacePunctuationSpace()
//Only replaces last item in array
println(newString)