Regex Swift正则表达式特殊字符

Regex Swift正则表达式特殊字符,regex,swift,locale,file-handling,Regex,Swift,Locale,File Handling,我目前正在使用正则表达式查找我的应用程序以前创建的一些文件,但我遇到了德语“Umlauten”的问题,比如ö,ä,ü。如果字符串中有“Umlaute”,则我的表达式不匹配。我猜这与语言环境有关,但我不知道应该设置什么语言环境(已经尝试了nil) 下面是一些代码: // Building the regex var regex = somePrefix + "_(" for string in stringArray{ regex += string + "|" // str

我目前正在使用正则表达式查找我的应用程序以前创建的一些文件,但我遇到了德语“Umlauten”的问题,比如ö,ä,ü。如果字符串中有“Umlaute”,则我的表达式不匹配。我猜这与语言环境有关,但我不知道应该设置什么语言环境(已经尝试了nil)

下面是一些代码:

// Building the regex
var regex = somePrefix + "_("
for string in stringArray{     
     regex += string + "|"  // string can contain öäü
}
regex.remove(at: regex.index(before: regex.endIndex))
regex += ")_w\\d_d\\d"

// Finding files
let fileManager = FileManager()
let files = fileManager.enumerator(atPath: somePath)
while let file = files?.nextObject() {
   let fileName = file as! String            
   if fileName.range(of: regex, options: .regularExpression, range: nil, locale: Locale.current) != nil {
   print(fileName + " found")
   }
}
//一些不匹配的示例:

Regex = reis 8_(Ibedir|Drölf )_w\d_d\d
Filename that didnt match = reis 8_Drölf _w0_d0.plist

显然,文件名使用的Unicode规范化形式与 给定的字符串。委员会建议:

在处理之前(或期间),将文本(和模式)转换为规范化形式。这是最容易实现的,因为有可用的代码库来进行规范化

这可以通过应用
.decomposedStringWithCanonicalMapping

模式和文件名都匹配。

这可能会有所帮助,因为这些字符是unicode:您能给出一个文件名和模式不匹配的具体示例吗?@MartinR i添加了一个示例这可能是unicode规范化问题。尝试将
.decomposedStringWithCanonicalMapping
添加到文件名和/或模式中。将其添加到这两个文件名和/或模式中就可以了。把它作为答案贴出来,我会接受的。