正则表达式找出是否有超过 1 次,然后格式化



谁能想出一个正则表达式来确定一个计划时间是否有 2 次?

例:

12:01 AM-3:00 AM 4:00 AM-9:00 AM
12:00 AM-5:00 AM 10:00 AM-2:00 PM
4:00 PM-7:00 PM
10:30 AM-4:00 PM
2:00 PM-5:00 PM 6:01 PM-8:01 PM
5:00 PM-6:30 PM 7:01 PM-9:46 PM
4:00 PM-10:45 PM

我最终要做的是去掉 PM 和 AM 之间的空格,如果它有超过 1 次,则得到两个时间,结果如下 - 在超过 1 次的那些之间放置一个 | ,小写 AM/PM 并最后删除两者之间的空格:

12:01pm-3:00am|4:00am-9:00am
12:00am-5:00am|10:00am-2:00pm
4:00pm-7:00pm
10:30am-4:00pm
2:00pm-5:00pm|6:01pm-8:01pm
5:00pm-6:30pm|7:01pm-9:46pm
4:00pm-10:45pm

我目前无法想到如何在不搞砸找到第二组时间的情况下做到这一点。我总是可以做到的:

Regex.Replace(myTimeStr, "s", "").toLower

但是,如果有超过 1 个,这样做会合并两次......

我认为最好在这里使用两个替换。你可以这样做

Dim pattern1 As String =  "(?<=d)s+(?=[AP])"
Dim pattern2 As String = "(?<=M)s+(?=d)"
Dim rgx1 As New Regex(pattern1)
Dim rgx2 As New Regex(pattern2)
Dim input As String = "12:01 AM-3:00 AM 4:00 AM-9:00 AM 4:00 AM-9:00 AM"
Dim result As String = rgx2.Replace(rgx1.Replace(input, ""), "|").toLower

Ideone 演示

最新更新