我有以下日期:
@"August 25-27, 2013"
@"June 5-9, 2013"
@"May 20, 2014"
我需要一个正则表达式,它给出了如下输出:
@"August 25 2013"
@"June 5 2013"
@"May 20 2014"
答案 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上运行