- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试让 python 正则表达式子函数正常工作,但遇到了一些麻烦。下面是我正在使用的代码。
string = 'á:tdfrec'
newString = re.sub(ur"([aeioäëöáéíóàèìò])([aeioäëöáéíóúàèìò]):", ur"\1:\2", string)
#newString = re.sub(ur"([a|e|i|o|ä|ë|ö|á|é|í|ó|à|è|ì|ò])([a|e|i|o|ä|ë|ö|á|é|í|ó|ú|à|è|ì|ò]):", ur"\1:\2", string)
print newString
# a:́tdfrec is printed
所以上面的代码没有按照我想要的方式工作。它显示不正确,但打印的字符串在 :
上有精确的重音。正则表达式语句将重音符号从 a
移到 :
上。对于我声明的字符串,不应该应用此正则表达式。我对此正则表达式语句的意图是仅适用于以下示例:
aä:dtcbd becomes a:ädtcbd
adfseì:gh becomes adfse:ìgh
éò:fdbh becomes é:òfdbh
但是我的正则表达式语句正在被应用,但我不希望它被应用。我认为我的问题是第二个字符集后跟 :
(即 á:
)是导致应用正则表达式语句的原因。我已经盯着这个有一段时间了,并尝试了其他一些东西,我觉得这应该有效,但我错过了一些东西。如有任何帮助,我们将不胜感激!
以下带有 re.UNICODE
标志的代码也无法实现所需的输出:
>>> import re
>>> original = u'á:tdfrec'
>>> pattern = re.compile(ur"([aeioäëöáéíóàèìò])([aeioäëöáéíóúàèìò]):", re.UNICODE)
>>> print pattern.sub(ur'\1:\2', string)
á:tdfrec
是因为变音符号和 tony the pony例如les Misérable
?颠倒后变音符号位于错误的字符上:
>>> original = u'les misérable'
>>> print ''.join([i for i in reversed(original)])
elbarésim sel
最佳答案
编辑:绝对是组合变音符号的问题,您需要规范化正则表达式和您要匹配的字符串。例如:
import unicodedata
regex = unicodedata.normalize('NFC', ur'([aeioäëöáéíóàèìò])([aeioäëöáéíóúàèìò]):')
string = unicodedata.normalize('NFC', u'aä:dtcbd')
newString = re.sub(regex, ur'\1:\2', string)
下面的示例说明了为什么您可能会在没有标准化的情况下遇到问题。字符串 u'á'
可以是单个代码点 LATIN SMALL LETTER A with ACCUTE (U+00E1),也可以是两个代码点,LATIN SMALL LETTER A (U+0061) 后跟结合锐利口音 (U+0301)。这些可能看起来相同,但它们在正则表达式中会有非常不同的行为,因为您可以将组合重音作为其自己的字符进行匹配。这就是字符串 'á:tdfrec'
所发生的情况,常规“a”在组 1 中捕获,组合变音符号在组 2 中捕获。
通过规范化正则表达式和您匹配的字符串,可以确保这种情况不会发生,因为 NFC 规范化会将变音符号及其前面的字符替换为单个等效字符。
原始答案如下。
<小时/>我认为您的问题是您尝试替换的字符串是字节字符串,而不是 Unicode 字符串。
如果这些是字符串文字,请确保您使用的是 u
前缀,例如字符串 = u'aä:dtcbd'
。如果它们不是文字,您将需要对其进行解码,例如string = string.decode('utf-8')
(尽管您可能需要使用不同的编解码器)。
你或许也应该normalize your string ,因为部分问题可能与组合变音符号有关。
请注意,在本例中 re.UNICODE
flag 不会产生任何影响,因为它只会改变字符类简写的含义,例如 \w
和 \d
。这里重要的是,如果您使用 Unicode 正则表达式,它可能应该应用于 Unicode 字符串。
关于Python正则表达式子函数与匹配组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891633/
我是一名优秀的程序员,十分优秀!