正则表达式:使用Python查找字符串中的名称

2024-10-03 02:41:14 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我从来没有在正则表达式方面遇到过困难。我希望解决方案不明显,因为我可能已经花了几个小时来解决这个问题。在

这是我的绳子:

<b>Carson Daly</b>: <a href="https://rads.stackoverflow.com/amzn/click/com/B009DA74O8" rel="nofollow noreferrer">Ben Schwartz</a>, Soko, Jacob Escobedo (R 2/28/14)<br>'

我想提取“Soko”和“jacobedo”作为单独的字符串。如果我用两种不同的模式来拔牙,那就好了。在

我试过“\s([A-Za-z0-9]{1}.+?),以及其他对正则表达式的修改,以获得我想要的数据,但我没有成功。感谢任何帮助。在

名字永远不会跟在同一个标签或同一个符号后面。名称前面唯一一致的是空格(\s)。在

下面是另一个字符串示例:

^{pr2}$

Tags: 字符串httpscom解决方案stackoverflowclickhref小时
2条回答

如果您想用正则表达式(以及关于该主题的所有免责声明),下面的正则表达式可以处理字符串。但是,请注意,您需要从捕获组1检索匹配项。在online demo中,确保查看右下窗格中的组1捕获。:)

<[^<]*</[^>]*>|<.*?>|((?<=,\s)\w[\w ]*\w|\w[\w ]*\w(?=,))

基本上,使用左边的交替(用|)来匹配我们不想要的所有内容,然后右边的最后一个括号捕捉我们想要的。在

这是关于matching a pattern except in certain situations这个问题的一个应用程序(有关实现细节,包括到Python代码的链接,请阅读该应用程序)。在

另一种方法是使用HTML解析器解析字符串,比如^{}。在

例如,通过检查precedingfollowing兄弟姐妹,可以使用xpath查找b标记和{}标记之间的所有内容:

from lxml.html import fromstring

l = [
    """<b>Carson Daly</b>: <a href="http://rads.stackoverflow.com/amzn/click/B009DA74O8">Ben Schwartz</a>, Soko, Jacob Escobedo (R 2/28/14)<br>'""",
    """<b>Carson Daly</b>: Wil Wheaton, the Birds of Satan, Courtney Kemp Agboh<br>"""
]

for html in l:
    tree = fromstring(html)
    results = ''
    for element in tree.xpath('//node()[preceding-sibling::b="Carson Daly" and following-sibling::br]'):
        if not isinstance(element, str):
            results += element.text.strip()
        else:
            text = element.strip(':')
            if text:
                results += text.strip()

    print results.split(', ')

它打印:

^{pr2}$

相关问题 更多 >