我正在处理一个NLP项目,其中的数据需要对PII进行清理。我使用spaCy NER处理了日期和名称,但我需要查找后跟字母数字的(不区分大小写)Room的示例。我有个东西能用,但太丑了。我从一个同事那里继承了一个模式,但他们的模式错过了很多模式,并且会抓住The room was...
和miss room 16b/16a/16c
这样的东西。我在python 3.X环境下工作。
我正在努力学习,并尽我所能使用regex101。虽然此模式主要用于查找room之后的字母数字模式,但它会抓取room之后的任何单词,这是不希望出现的。The room was cleaned
变为The room number cleaned
。我认为\w?
是不期望的原因。我在?\w? ?
之后添加了这个模式,但我认为它并不高效,也不容易理解到底发生了什么。
我的模式
(room|rm) ?(#|number|no.?)? ?\w? ?(\d+|[a-z0-9\-?\/\(\) ]{2,5})[a-z]?| (room?) ([0-9]+[a-z/]+)+| room? [a-z]?[0-9/]+
字符串
和示例
room (b7)
rm 2
rm no 4
room a12
Room 12
Roomd25
room D25
ROOM D25
ROOM C-11
room 17
room A4B
room 101
rm #17
room 37/39
ROOM B-1
room C 29 from
room C23/25/27
room 16b/18a/18b
Clean the room now _AVOID_
型
1条答案
按热度按时间pb3skfrl1#
正则表达式对于自定义的人工输入来说可能很难看,因为我们是人类,我们输入的东西不同。如果可能,请在存储数据之前尝试清理数据。
可能会使所有内容都小写,将
rm
替换为room
。删除字符串中的任何非字母字符。在使用regex之前,我肯定会这样做。字符串