【问题标题】:RegEx / Regular expression for european dates ("j. F Y")RegEx / 欧洲日期的正则表达式(“j. F Y”)
【发布时间】:2016-02-07 09:54:40
【问题描述】:

我需要一种在Swift 2.0 中使用.RegularExpressionSearch 来查找日期的方法,以类似欧洲风格的方式编写 “2015 年 11 月 6 日”“2015 年 2 月 13 日”“2015 年 12 月 24 日”(带有可选空格)。

我尝试了很多使用this very helpful regex tester Web site 的表达式,但是,我无法获得有效的解决方案。感谢您的帮助!

【问题讨论】:

  • 我使用的是 Swift 2.0 / .RegularExpressionSearch

标签: regex string swift date swift2


【解决方案1】:

您可以使用以下正则表达式:

let regex = try NSRegularExpression(pattern: "\\d+\\.\\s*\\p{L}+\\s*\\d{4}", options: []) 

regex demo

正则表达式将匹配:

  • \d+ - 1 位或更多位(您可以使用限制量词将其限制为 1 或 2:\d{1,2}
  • \. - 文字点
  • \s* - 0 个或多个空格
  • \p{L}+ - 一系列纯字母符号
  • \s* - 0 个或多个空格
  • \d{4} - 正好 4 位数字。

Swift code demo:

func matchesForRegexInText(regex: String, text: String) -> [String] {

    do {
        let regex = try NSRegularExpression(pattern: regex, options: [])
        let nsString = text as NSString
        let results = regex.matchesInString(text,
            options: [], range: NSMakeRange(0, nsString.length))
        return results.map { nsString.substringWithRange($0.range)}
    } catch let error as NSError {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}

let string = "6. November 2015 and 13. Februar 2015 or 24.Dezember2015 1. My christmas gift 2015 01.01.2015"
let matches = matchesForRegexInText("\\d+\\.\\s*\\p{L}+\\s*\\d{4}", text: string)
print(matches)

结果:["6. November 2015", "13. Februar 2015", "24.Dezember2015"]

【讨论】:

  • 我想这里没关系,你也可以用matchesForRegexInText(regex: String, text: String)
  • 非常感谢!有效,但也可以识别 “01.01.2015”。即使在您的解释的帮助下,我也不知道如何禁止数字。如果您能给我一个提示,那就太好了。
  • 好吧,我明白了,你的输入真的很乱。使用\d+\.\s*\p{L}+\s*\d{4} 正则表达式。
【解决方案2】:

我认为这个正则表达式对你有用:

(\d{1,2}\s*\.\s*[^\d]+\d{4})

【讨论】:

  • 谢谢!效果近乎完美,但也能捕捉到 “1. 我的圣诞礼物 2015”。有没有办法在两者之间禁止空格?
  • (\d{1,2}\s*\.\s*\S+\s*\d{4})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
相关资源
最近更新 更多