python - 为什么 re.findall 会这样?(蟒蛇正则表达式)
问题描述
我在 pyhton 中做了一个小程序,它通过一个音乐网站搜索并收集音乐数据。音乐的格式为[artist] - [music name] [music file format]
. 一开始我re.search
是找某位艺人的(我用了正则表达式,因为上面的音乐信息中还有一些其他的字符和不规则性,找到艺人的唯一指标是-
关注艺人)。
不知何故,它不起作用,所以我将其更改为re.findall
以防万一,但它仍然不起作用。因为我是 python 的初学者,所以我认为我有什么问题,所以我写了一些测试代码来研究哪里出了问题。这就是我得到的。
当我更改x
字符串(这将是音乐信息)并re.findall
再次运行时,它给了我不同的结果(无)。我 100% 认为结果会是一样的。为什么会这样?这可能是我的原始代码不起作用re.serach
的原因吗?re.findall
我已经包含了代码以防万一。(使用硒)
idx = 1
while True:
try:
hxp1 = "(//h3[@class='entry-title td-module-title']/a)[" + str(idx) + "]"
text = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, hxp1)))
# info = eg) 'Michael Jackson - Beat it [FLAC, MP3, WAV]'
info = text.get_attribute('title') # get 'info' as string
# ARTIST = eg) 'Michael Jackson'
regex = ARTIST + ' - '
match = re.findall(regex, info) # or use re.search
# do something with 'match'...
idx += 1
except:
# do something...
break
解决方案
看来你需要确保你匹配
- 任何 Unicode 空格(即
\s
在 Python 3.x 或(?u)\s
Python 2.x 中,请参阅re
文档:“匹配 Unicode 空格字符(包括[ \t\n\r\f\v]
,以及许多其他字符,例如许多语言中的排版规则要求的不间断空格) ). ") - 任何 Unicode 连字符(请参阅在 Python 中搜索所有 Unicode 连字符变体)。
将所有这些结合到您的正则表达式中:
Minami\s[\u002D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]\s
在您的情况下,如果您只需要支持 en-dash/em-dash/hyhen 字符和任何 Unicode 空白字符,您可以使用
Minami\s[-—–]\s
推荐阅读
- kubernetes - 在管理可扩展性方面,在 Kubernetes 集群上部署带有 Debezium 的 Kafka 有什么区别?
- laravel - Firebase 在 Laravel 中使用 HTML 返回 404 错误
- javascript - 仅显示一次模态显示
- mysql - 按子查询表排序
- laravel - 如何检索一对多关系。此集合实例上不存在属性 [produks]
- linux - 我有一个按列排序的文本文件。如何在单个列中搜索匹配的字符串,然后打印整行
- c++ - 为什么要实例化此模板类特化?
- javascript - 如何添加 WebRTC ICE Candidate?
- javascript - p5向量减法'sub'返回错误
- charles-proxy - Charles Proxy 不保存代理设置