You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则表达式提取符合特定条件的房间号?

如何编写正则表达式提取符合特定条件的房间号?

嘿,我来帮你捋清楚这个正则的问题!

首先先明确你的核心需求:只提取那些标记为"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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:14:30