Python 重新更换&;带名称实体
我必须用输入字符串中的名称实体或十进制实体替换Python 重新更换&;带名称实体,python,regex,Python,Regex,我必须用输入字符串中的名称实体或十进制实体替换&,但输入字符串可能包含其他名称,并且将出现&中的十进制实体 代码: import re text =' At&T, " < I am > , At&T so < < & & ' #- Get all name entities and decimal entities. replace_tmp = re.findall("&#\d+;|&[a-z]+;
&
,但输入字符串可能包含其他名称,并且将出现&
中的十进制实体
代码:
import re
text =' At&T, " < I am > , At&T so < < & & '
#- Get all name entities and decimal entities.
replace_tmp = re.findall("&#\d+;|&[a-z]+;", text)
#- Replace above values from tempvalues.
tmp_dict = {}
count = 1
for i in replace_tmp:
text = text.replace(i, "$%d$"%count)
tmp_dict["$%d$"%count] = i
count += 1
#- Replace & with &
text = text.replace("&", "&")
#- Replace tempvalues values with original.
for i in tmp_dict:
text = text.replace(i, tmp_dict[i])
print text
重新导入
text='At&T,,At&T so<;&&'
#-获取所有名称实体和十进制实体。
替换_tmp=re.findall(\d++&[a-z]+;”,文本)
#-将上述值替换为临时值。
tmp_dict={}
计数=1
对于替换tmp中的i:
text=text.replace(i,“$%d$%count)
tmp_dict[“$%d$%count]=i
计数+=1
#-替换为&;
text=文本。替换(“&”、“&;”)
#-将临时值替换为原始值。
对于tmp_目录中的i:
text=text.replace(i,tmp_dict[i])
打印文本
最终输出:At&;T,,At&;T so<&&代码>
但是我能得到直接做上述事情的正则表达式吗?
py文件中的最后一行:
import re
text =' At&T, " < I am > , At&T so < < & & '
#- Get all name entities and decimal entities.
replace_tmp = re.findall("&#\d+;|&[a-z]+;", text)
#- Replace above values from tempvalues.
tmp_dict = {}
count = 1
for i in replace_tmp:
text = text.replace(i, "$%d$"%count)
tmp_dict["$%d$"%count] = i
count += 1
#- Replace & with &
text = text.replace("&", "&")
#- Replace tempvalues values with original.
for i in tmp_dict:
text = text.replace(i, tmp_dict[i])
print text
value=re.sub(r'&(?)(#[0-9]+|[a-zA-Z]+;),“&;”,value)。替换(“,”)。替换(“,”),”)
使用带负前瞻的字符串替换
import re
text =' At&T, " < I am > , At&T so < < & & '
text = re.sub(r'&(?![\w\d#]+?;)',"&",text)
print text
重新导入
text='At&T,,At&T so<;&&'
text=re.sub(r'&(?![\w\d#]+?)',“&;”,text)
打印文本
使用带负前瞻的字符串替换
import re
text =' At&T, " < I am > , At&T so < < & & '
text = re.sub(r'&(?![\w\d#]+?;)',"&",text)
print text
重新导入
text='At&T,,At&T so<;&&'
text=re.sub(r'&(?![\w\d#]+?)',“&;”,text)
打印文本
>>导入re
>>>re.sub(r'&(?(#[0-9]+|\w+)','和','At&T,,At&T so和&&&&&&&&&)
“At&;T”,,At&;T so<&&;'
您可以对\w+使用否定的前瞻断言代码>(例如:
)和#[0-9]+代码>(适用于#60;
)
因此,正则表达式是:
&(?(#[0-9]+|\w+)
否定前瞻断言确保既没有#[0-9]+代码>或\w+代码>在之前和
您也可以使用[a-zA-Z]+代码>而不是\w+代码>>>导入re
>>>re.sub(r'&(?(#[0-9]+|\w+)','和','At&T,,At&T so和&&&&&&&&&)
“At&;T”,,At&;T so<&&;'
您可以对\w+使用否定的前瞻断言代码>(例如:
)和#[0-9]+代码>(适用于#60;
)
因此,正则表达式是:
&(?(#[0-9]+|\w+)
否定前瞻断言确保既没有#[0-9]+代码>或\w+代码>在之前和
您也可以使用[a-zA-Z]+代码>而不是\w+代码>您期望的输出是什么?期望的输出:At&;T、 “,At&;T so<;&;
可能重复See Special@VivekSable使用负前瞻正如我在回答中所指出的,最好使用预定义函数,考虑您期望的输出是什么?预期输出:At&;T,,At&;T so<&&代码>可能重复的See特别是@VivekSable使用反向前瞻正如我的回答中所指出的,最好使用预定义函数,尽管&
可以是任何地方,这只是一个测试用例&
可以是任何地方,这只是一个测试用例,看起来是一样的替换(“,”,“,”,“,”,“,”,“,”,“,”,“,”,”,“,”,“,”,”,“,”,”,“,”,”,“,”,这是我最后的py行,看起来是一样的。re.sub(r)&(?([0-9]+;[a-zA-Z]+),“,”,“,”,“,“,”,“,“,”,“,”和At&T,“,,At&T“so”&,”,60,”,“,“,“,”,这是我最后的py行