【发布时间】:2019-05-23 15:23:47
【问题描述】:
在 Excel VBA 中,我尝试使用正则表达式方法来匹配字符串。一旦匹配发生,我希望匹配的字符串包含整个字符串,除非在匹配字符串结束后出现关键字。换个说法,正则表达式模式如下:
pattern = (CHECKOUT[a-zA-Z_(/ ):]+\w+:\w+\s((AM|PM)|(am|pm))\s\-\s\w+:\w+\s((AM|PM)|(am|pm)))
输入的字符串是:
1. CHECKOUT Senior Guest Services Manager FRONTENDMGR: 07:00 AM - 08:30 AM SGSM_BOOKKEEPING: 08:30 AM - 01:00 PM FRONTENDMGR: 01:00 PM - 04:00 PM
2. CHECKOUT Guest Services Manager BOOKKEEPER: 09:00 AM - 01:00 PM DRY GOODS Receiving Clerk RECEIVE: 04:30 AM - 09:00 AM
3. DRY GOODS Receiving Clerk RECEIVE: 04:30 AM - 09:00 AM CHECKOUT Guest Services Manager BOOKKEEPER: 09:00 AM - 01:00 PM
对于第一个字符串,我希望返回整个字符串,但只返回以下内容: 退房高级宾客服务经理 FRONTENDMGR:07:00 AM - 08:30 AM
对于第二个字符串,我只希望返回从“CHECKOUT”到“01:00 PM”的字符串的第一部分,并且效果很好。
对于第三个字符串,我只希望返回“CHECKOUT”到“01:00 PM”之间的部分并发生这种情况。
所以唯一没有出现的是第一个字符串,我希望返回整个字符串,但只有第一部分匹配。
所以我需要调整模式以包含所有内容,除非字符串中包含“DRY GOODS”一词,如果是,则仅返回“CHECKOUT”和“AM”或“PM”之间的部分。
【问题讨论】:
标签: regex excel vba regex-negation regex-lookarounds