如何编写正则表达式提取符合特定条件的房间号?
如何编写正则表达式提取符合特定条件的房间号?
嘿,我来帮你捋清楚这个正则的问题!
首先先明确你的核心需求:只提取那些标记为"Dirty"、同时包含"Occupied"和"Checked Out"状态的房间的3-4位房间号,对吧?你之前写的正则问题出在误加了"Vacant"的匹配条件,而且没有限制匹配范围在单个房间的条目内,导致逻辑不对。
我给你写一个符合要求的正则表达式,然后拆解下每个部分的作用:
Dirty(\d{3,4})(?:(?!Dirty|Out of Order).)*?Occupied.*?Checked Out
各部分解释:
Dirty(\d{3,4}):开头精准匹配"Dirty",然后捕获后面紧跟的3-4位数字(这就是我们要的房间号)(?:(?!Dirty|Out of Order).)*?:这是个负向前瞻的非捕获组,作用是确保我们只在当前这个房间的信息块里匹配——一旦遇到下一个房间的起始标记("Dirty"或者"Out of Order")就停止,避免跨房间匹配,*?是非贪婪模式,尽量少匹配,防止过度延伸Occupied.*?Checked Out:在当前房间的信息块里,精准匹配到"Occupied"和后续的"Checked Out",确保这两个状态同时存在于这个Dirty房间的条目中
测试你的示例文本:
你的测试内容里,Dirty1057对应的条目正好包含"Occupied"和"Checked Out",这个正则会成功捕获到1057;而Out of Order1060的条目是Vacant状态,完全不会被匹配,正好符合你的要求。
另外要注意:如果你的正则引擎默认不允许.匹配换行符(比如Python的re模块默认不支持),可以把.换成[\s\S],或者开启单行模式(比如Python里用re.DOTALL参数),这样换行的内容也能被正确匹配到。
备注:内容来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

