Python 问题匹配部分带下划线的字符串
我有一个要搜索和替换的单词数据库。参见第16行id:17 我想使用python正则表达式匹配docx文档中的字符串“6(六)个月”。但是,如果字符串部分带下划线,则不会将该字符串替换为所需的“y月” 例如: main.py从docx.py调用regex dfinitionPython 问题匹配部分带下划线的字符串,python,regex,Python,Regex,我有一个要搜索和替换的单词数据库。参见第16行id:17 我想使用python正则表达式匹配docx文档中的字符串“6(六)个月”。但是,如果字符串部分带下划线,则不会将该字符串替换为所需的“y月” 例如: main.py从docx.py调用regex dfinition for x in mycol.find(): docx_replace_regex(document, re.compile(x["original"]+'\S*', re.IGNORECASE),
for x in mycol.find():
docx_replace_regex(document, re.compile(x["original"]+'\S*', re.IGNORECASE), x["replace"])
docx.py
def docx_replace_regex(doc_obj,regex,replace):
我的代码适用于数据库中的每个单词,只要它没有部分下划线。您正在匹配\([a-z]+\)
,但显然,数据库中带下划线的字符存储为与[a-z]
不同的字符
数据库中的文本可能存储为UTF-8,下划线可能只是“下划线字符”,您可以在应用正则表达式之前过滤掉这些字符(或者可以在正则表达式中包含下划线字符,如果支持的话)
要删除带下划线的UTF-8字符(假设在数据库中是这样做的,我们没有访问权限,您也没有提供示例):
发布代码并阅读@ZarakiKenpachi这行吗?请让我知道如何改进我的问题。我希望看到在该示例中调用repr的结果。它可能会显示下划线的编码方式。whats repr@DanD。谢谢您的回复。“你可以在应用正则表达式之前过滤掉”我该怎么做数据库的示例在屏幕上显示的图片与数据示例不同。
for p in doc_obj.paragraphs:
if regex.search(p.text):
# print(p.text)
inline = p.runs
# Loop added to work with runs (strings with same style)
for i in range(len(inline)):
# print(i)
if regex.search(inline[i].text):
# myTexts.append(inline[i].text)
text = regex.sub(replace, inline[i].text)
inline[i].text = text
# print(text)
import re
line = 't͟e͟x͟t͟͟'.encode("utf-8")
underline = b'\xcd\x9f'
print(re.sub(underline, b'', line))
line = 't͟e͟x͟t͟͟'
underline = b'\xcd\x9f'.decode('utf-8')
print(re.sub(underline, '', line))