正则表达式错误

Regex Expression wrong

我正在尝试从以下短语中提取国家/地区(这里是印度尼西亚):

<small class="text-muted">
                            <span class="hidden-xs">Football / </span>Indonesia / 
                            <span class="hidden-xs xh-highlight">Kick off: </span>11 Sep 2019, 11:30                            </small>

目前,我只是使用以下命令来提取文本:

.xpath('.//small[@class="text-muted"]/text()').extract()

仅提取印度尼西亚的正确正则表达式命令是什么?

也许,从 bs4 导入 BeautifulSoup,我们可以提取国家,如果这样的话:

from bs4 import BeautifulSoup
import re

string="""
<small class="text-muted">
                            <span class="hidden-xs">Football / </span>Indonesia / 
                            <span class="hidden-xs xh-highlight">Kick off: </span>11 Sep 2019, 11:30                            </small>
A

"""

soup = BeautifulSoup(string, 'html.parser').find_all('small')[0].text

print(re.findall(r'[^/]+/\s*([^/]+?)\s*/', soup)[0])

输出

Indonesia

您可以使用这个 XPath-1.0 表达式:

//small[@class="text-muted"]/span[@class="hidden-xs"]/following-sibling::text()

结果为 Indonesia /.
如果你想摆脱斜线,你有几种可能性:

  1. 删除表达式中的所有斜线:

    normalize-space(translate(//small[@class="text-muted"]/span[@class="hidden-xs"]/following-sibling::text(),"/",""))
    
  2. substring-before()得到斜线前的字符串:

    normalize-space(substring-before(//small[@class="text-muted"]/span[@class="hidden-xs"]/following-sibling::text(),"/"))
    
  3. substring-before()得到第一个space之前的字符串:

    normalize-space(substring-before(//small[@class="text-muted"]/span[@class="hidden-xs"]/following-sibling::text()," "))
    

还有其他 XPath 表达式也可以使用。选择最适合您情况的一项。 // 之前的前导点只有在指定当前节点的相对路径时才需要。在上面的表达式中,我确实假设查找是全局的。

当然,这些 XPath 表达式必须用

包围
.xpath('...').extract()

问题是,你对输入法了解多少?你显然不知道它包含"Indonesia",但输入的其他部分是否完全固定?例如,您要查找的文本是否总是紧跟在内容为 Football /?

的 span 元素之后

如果是这样的话你可以做

//small[@class="text-muted"]/span[. = Football / ']/following-sibling::text()[1]