首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我希望使用python中的regex提取地址,在这里我可以使用一个查找器,这样我就可以得到包含地址的前面的3-4个字符串。

我希望使用python中的regex提取地址,在这里我可以使用一个查找器,这样我就可以得到包含地址的前面的3-4个字符串。
EN

Stack Overflow用户
提问于 2021-03-30 06:06:17
回答 2查看 270关注 0票数 1
代码语言:javascript
复制
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‘,而不是得到所需的输出。

代码语言:javascript
复制
re.findall(r'(\w\S+\s+)(?=Hyderabad){3}'

我想要的产出是-‘阿波罗健康城市校园,喜比利山,海得拉巴- 500 033。‘

我想要写一个regex表达式,它可以帮助我在城市名之前提取3到4个字符串,比如“Hyderabad”(在这种情况下),以及原始字符串中是否存在特殊字符。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-30 17:54:35

你可以用德克

代码语言:javascript
复制
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)

产额

代码语言:javascript
复制
['Apollo', 'Health', 'City', 'Campus,', 'Jubilee', 'Hills,', 'Hyderabad']
票数 0
EN

Stack Overflow用户

发布于 2021-03-30 16:26:40

为什么正则表达式很可能是一个错误的方法?

正如蒂姆·罗伯茨在上面所指出的,这不是一个最好使用regex来处理的问题。它需要一个强大得多的工具,而不仅仅是正则表达式。

这个答案中,您可以看到识别地址并将其拆分为街道地址、城市、邮政编码等元素的方法。我希望它能说明这个问题的复杂性。

您的例子表明,实际上您要做的是对医院和/或它们的地址等实体进行信息提取。可以使用经过培训的命名实体识别工具来检测文本中的此类实体。

如何构造前瞻性正则表达式

如果使用以下正则表达式:

代码语言:javascript
复制
r'((\w\S+\s+){1,6})(?=Hyderabad){3}'

它将提取您想要的内容:

阿波罗健康城校园,喜比利山,

请看这里的测试实例。请注意,感兴趣的部分是第一个匹配组,而不是整个匹配的文本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66865570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档