治疗'\xa0';在python中作为正则表达式中的空格

治疗'\xa0';在python中作为正则表达式中的空格,python,regex,python-3.x,Python,Regex,Python 3.x,我正在使用Selenium和BS4构建一个web scraper来获取数据。我使用Selenium在页面完全加载后获得html。然后,我使用Selenium中打开的页面的page_源创建一个BeautifulSoup对象。之后,我开始解析html以查找页面上的特定元素。我需要使用正则表达式来解析一些字符串。但是,某些非中断空格(并非全部)被视为“\xa0”字符。这给python的正则表达式搜索带来了一个问题(它不会将这些搜索视为空格) 例如,我有以下字符串: import re import u

我正在使用Selenium和BS4构建一个web scraper来获取数据。我使用Selenium在页面完全加载后获得html。然后,我使用Selenium中打开的页面的page_源创建一个BeautifulSoup对象。之后,我开始解析html以查找页面上的特定元素。我需要使用正则表达式来解析一些字符串。但是,某些非中断空格(并非全部)被视为“\xa0”字符。这给python的正则表达式搜索带来了一个问题(它不会将这些搜索视为空格)

例如,我有以下字符串:

import re
import unicodedata
testString ="JM Wing\xa0- ...\xa0Transactions of the Royal Society A\xa0..., 2008 - royalsocietypublishing.org"
根据我在网上发现的情况,我尝试了以下几种解决方案,但它们似乎都不起作用。(请注意,原始html.page_源返回一个bytes对象,因此我尝试使用decode

testString = testString.replace(u'\xa0', u' ').encode('utf-8') #turns string into bytes
testString = testString.decode(encoding="utf-8",errors="ignore") #must be a bytes object
testString = unicodedata.normalize("NFKD", testString)
无论我怎么做,我似乎都无法摆脱“\xa0”字符,正则表达式也不会将这些字符视为空格。知道如何解决这个问题吗?我希望我的汤对象是utf-8,因为我可能要处理来自多种语言的字符。但我真的需要将这些字符转换为空格,以便我可以使用正则表达式解析这些字符串在html中没有语义标记

编辑:我可以运行以下命令并获得我想要的字符串,但是捕获括号似乎不能得到我想要的部分(因此我得到了字符串前后的“-…\ax0”和“,”


这将返回“…\xa0皇家学会的交易A\xa0…,”。理想情况下,我只想得到括号中应该表示的“交易…社会”一词。奇怪的是,我只能通过re.search()得到这个结果。相反,re.findall()得到这个结果只返回一个空字符串。

我找到了一个解决方案。由于第一次遇到的字符串是html,因此所讨论的空格实际上是
,因此,在删除html并将其转换为汤之前,我使用以下代码替换
,然后将其转换为字节字符串

html = html.replace(" ",' ').encode('utf-8')
这似乎可以消除\xa0的所有实例


奇怪的问题是,正则表达式中的捕获括号仍然不起作用,如果我使用re.findall,我会得到一个空字符串。

这能回答你的问题吗?@CAustin,不幸的是,我在该页面上尝试了这些建议,但运气不佳(请注意,3个主要建议就是我上面列出的3个)
html = html.replace(" ",' ').encode('utf-8')