Python正则表达式组

Python正则表达式组,python,regex,Python,Regex,我从PDF中刮取了一些文字,字符的重音/umlaut在字母后被刮去,例如:`“Jos'e”和“Mu¨ller”。因为这些角色只有少数几个,我想把它们改成例如“José”和“Müller” 我正在尝试适应这里的模式 在上面的示例中,我可以使用什么模式来获取'''''字符的位置?然后我可以检查后面的字母并相应地替换文本 我的文本是从科学论文中抄袭而来的,可能在其他地方包含这些字符,例如在代码中。这就是为什么我使用正则表达式而不是。将或文本规范化替换为例如unicodedata,因为我想确保替换的是“

我从PDF中刮取了一些文字,字符的重音/umlaut在字母后被刮去,例如:`“Jos'e”和“Mu¨ller”。因为这些角色只有少数几个,我想把它们改成例如“José”和“Müller”

我正在尝试适应这里的模式

在上面的示例中,我可以使用什么模式来获取
'''''
字符的位置?然后我可以检查后面的字母并相应地替换文本

我的文本是从科学论文中抄袭而来的,可能在其他地方包含这些字符,例如在代码中。这就是为什么我使用正则表达式而不是
。将
或文本规范化替换为例如
unicodedata
,因为我想确保替换的是“单词”(更准确地说是作者的名字和姓氏)


编辑:我可以放宽这些条件,只需在任何地方替换这些字符,因为如果它们出现在非单词中,例如“F=m”⋅无论如何,我将丢弃非单词。因此,我可以使用一种简单的
replace
方法

对模式的快速修复将返回您正在查找的索引。小组将只捕捉撇号字符,而不是匹配整个单词

import re

pattern = "(?=\S*[´])[a-zA-Z]+([´]+)[a-zA-Z]+"
ms = re.finditer(pattern, "Jos´e Vald´ez")
for m in ms:
    print(m.group())   # returns "Jos´e" and "Vald´ez"
    print(m.start(1))  # returns 3 and 10
我建议使用

重新导入
d={'e':'e','u¨':'u'}
pattern=“|”。.join([x代表d中的x])
打印(关于sub(模式,lambda m:d[m.group()],“Jos'e Vald'ez”))
#=>何塞·瓦尔德斯

如果你需要确定单词边界,你可以考虑使用

pattern = r"\b´e|u¨\b"

\b
'
之前和之后
u
将确保它们之前/之后有其他单词字符。

为什么不像
s.replace('e','e')。replace('u¨,'u')
?这些都是单词的一部分。我想确定我正在替换单词,但这些都是单词。你这是什么意思?您希望匹配发生在什么上下文中?请澄清。是的,但我可以在文本中使用诸如‘’之类的字符出现在非单词中,如Code。我想你是对的,我想我让自己太难了。如果这些字符出现在(糟糕的)非单词/名称的拼凑文本中,我无论如何都会去掉这些单词。欢迎您在WiktorStribiżewAh发布答案,OP已经得出结论,没有必要匹配单词。我将删除注释。请注意,
(?=\S*['')
在这里是多余的,因为
[a-zA-Z]+(['']+)
立即遵循此前瞻。因此,前瞻性将始终返回True。
pattern = r"\b´e|u¨\b"