text = ' My uncle is admitted in the hospital. the address of the hospital is \n Apollo Health City Campus, Jubilee Hills, Hyderabad - 500 033. '现在,我使用这个作为正则表达式,但只是得到'Hills‘,而不是得到所需的输出。
re.findall(r'(\w\S+\s+)(?=Hyderabad){3}'我想要的产出是-‘阿波罗健康城市校园,喜比利山,海得拉巴- 500 033。‘
我想要写一个regex表达式,它可以帮助我在城市名之前提取3到4个字符串,比如“Hyderabad”(在这种情况下),以及原始字符串中是否存在特殊字符。
发布于 2021-03-30 17:54:35
你可以用德克
from collections import deque
text = ' My uncle is admitted in the hospital. the address of the hospital is Apollo Health City Campus, Jubilee Hills, Hyderabad - 500 033. '
def guess_address(needle, string):
stack, started = [], False
de = deque(string.split())
while de:
word = de.pop()
if word == needle:
stack.append(word)
started = True
elif started and word[0].isupper():
stack.append(word)
elif started and word[0].islower():
break
return stack[::-1]
stack = guess_address('Hyderabad', text)
print(stack)产额
['Apollo', 'Health', 'City', 'Campus,', 'Jubilee', 'Hills,', 'Hyderabad']发布于 2021-03-30 16:26:40
为什么正则表达式很可能是一个错误的方法?
正如蒂姆·罗伯茨在上面所指出的,这不是一个最好使用regex来处理的问题。它需要一个强大得多的工具,而不仅仅是正则表达式。
在这个答案中,您可以看到识别地址并将其拆分为街道地址、城市、邮政编码等元素的方法。我希望它能说明这个问题的复杂性。
您的例子表明,实际上您要做的是对医院和/或它们的地址等实体进行信息提取。可以使用经过培训的命名实体识别工具来检测文本中的此类实体。
如何构造前瞻性正则表达式
如果使用以下正则表达式:
r'((\w\S+\s+){1,6})(?=Hyderabad){3}'它将提取您想要的内容:
阿波罗健康城校园,喜比利山,
请看这里的测试实例。请注意,感兴趣的部分是第一个匹配组,而不是整个匹配的文本。
https://stackoverflow.com/questions/66865570
复制相似问题