python - 正则表达式不以相同的方式拆分文本

标签 python regex string unicode scrapy

我有一个带有 scrapy 的蜘蛛,我正在使用正则表达式来拆分每个单词的文本。它适用于英语和韩语,但当我尝试抓取西类牙语时,它并没有把事情搞砸。

foo = 'the quick brown fox'
english = foo.xpath('//*[@id="mw-content-text"]//p').xpath('string(.)').re(ur'[a-zA-Z\'-]+')
english = ['the','quick','brown','fox',]

foo = '빨른 깨를 있어요'
korean = foo.xpath('//*[@id="mw-content-text"]//p').xpath('string(.)').re(ur'[\uac00-\ud7af]+')
korean = ['빨른','깨를','있어요']

foo = 'el zorro marron rapido'
spanish = foo.xpath('//*[@id="mw-content-text"]//p').xpath('string(.)').re(ur'[\u0000-\u00FF]+')
spanish = ['el zorro marron rapido']

我只是不明白为什么这会与其他语言有任何不同的对待。

最佳答案

与其他正则表达式不同,[\u0000-\u00FF] 包含空格字符 (\u0020)。

>>> import re
>>> re.search(ur'[a-zA-Z\'-]', ' ')  # does not match space
>>> re.search(ur'[\uac00-\ud7af]', ' ')  # does not match space
>>> re.search(ur'[\u0000-\u00FF]', ' ')  # match space
<_sre.SRE_Match object at 0x7fe024fc4648>

调整正则表达式以排除空格字符。例如:[\u0000-\u001f\u0021-\u00FF]+


但是,这里没有必要使用正则表达式。只需使用 str.split足以让单词被空格分开:

>>> 'the quick brown fox'.split()
['the', 'quick', 'brown', 'fox']
>>> '빨른 깨를 있어요'.split()
['빨른', '깨를', '있어요']
>>> 'el zorro marron rapido'.split()
['el', 'zorro', 'marron', 'rapido']

关于python - 正则表达式不以相同的方式拆分文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33949374/

相关文章:

python - 在 Theano 中结合标量和向量来计算 Hessian

python - Airflow 1.9.0 无法对任务进行排队

regex - "GREATER THAN"的 SUMIF 数组公式

ruby-on-rails - 如何在不使用 eval 的情况下将字符串转换为 Ruby on Rails 中的散列?

c++ - 递归比较字符串的函数 - C++

java - 分割逗号分隔的字符串并提取特定值

python - 如何在 PyCrypto 中使用加密的 RSA 私钥?

python - 使用 MCMC 进行模型拟合时步行者不为 "walking"

regex - 我们什么时候真正使用 Trie 树?

java - 在 Java 中应用此正则表达式