正则表达式仅匹配特定要求的月份日期和年份

时间:2014-01-08 05:56:09

标签: objective-c regex nsregularexpression

我有以下日期:

@"August 25-27, 2013"

@"June 5-9, 2013"

@"May 20, 2014"

我需要一个正则表达式,它给出了如下输出:

@"August 25 2013"

@"June 5 2013"

@"May 20 2014"

3 个答案:

答案 0 :(得分:2)

正则表达式字符串

(\w{3,}) (\d+).*?(\d{4})

替换字符串

$1 $2 $3


奖金!

这也是一个非常具体的版本,它只会获取第一位的月份名称(包括3个月份的名称,即1月,2月,3月,11月)。

(?<month>(?:Jan(:?uary)?)|(?:Feb(:?ruary)?)|(?:Mar(:?ch)?)|(?:Apr(:?il)?)|(?:May)|(?:Jun(:?e)?)|(?:Jul(:?y)?)|(?:Aug(:?ust)?)|(?:Sep(:?tember)?)|(?:Oct(:?ober)?)|(?:Nov(:?ember)?)|(?:Dec(:?ember)?)) (?<day>\d+).*?(?<year>\d{4})

它使用命名捕获,因此您可以将替换文本更改为:

${month} ${day} ${year}

答案 1 :(得分:0)

正则表达式匹配是原始字符串的子字符串,在一次匹配中不会获得所需的结果,您将获得两个匹配并且连接将产生所需的结果。我建议用空字符串替换不必要的东西。为此你可以使用:

((\-\d+)?,)

答案 2 :(得分:0)

echo "August 25-27, 2013" | sed -e "s/\\-[0-9]*//" -e "s/,//"

输出:2013年8月25日

echo "June 5-9, 2013" | sed -e "s/\\-[0-9]*//" -e "s/,//"

产出:2013年6月5日

echo "May 20, 2014" | sed -e "s/\\-[0-9]*//" -e "s/,//"

产出:2014年5月20日

在我的os x 10.9上运行