我有一个re.sub
程序,它在text_string
中的逗号之间替换某些值:
re.sub('(?:(?<=\,)|(?<=^))[^\w\d\r\n\t]*(HUN)[^\w\d\r\n\t]*(?=(?:\,|$))','',text_string,flags=re.IGNORECASE)
它将HUN
替换为零。你知道吗
我在很多文件上都试过。文件有时很大,有时很小。偶尔,我会从re.py
库中得到一个MemoryError
。什么是分割执行的最好方法,这样我就不会得到MemoryError
?你知道吗
我担心正则表达式是先查看整个字符串(例如,iftext_string
ist,w,g,g,hun,t,w
),然后再查看逗号之间的字符串,而不是只查看逗号之间的字符串(即,以非贪婪的方式)。有人知道这是怎么评估的吗?你知道吗
如果字符串是超长的,正则表达式是否知道以非贪婪的方式计算逗号之间的值?谢谢。你知道吗
你的模式真奇怪。你知道吗
(?:(?<=\,)|(?<=^))
-这可以变成一个常规的非捕获组(?:,|^)
[^\w\d]
-因为\w
已经匹配了\d
,所以\d
是冗余的[^\w\r\n\t]*
-匹配标点(!)因此,
。这使得regex引擎很难分析在您的hun
之前有许多逗号分隔值的字符串。你知道吗(?=(?:,|$))
-如果您计划匹配重叠的字符串,那么lookahead是有意义的,否则,您可以用(?:,|$)
替换它。你知道吗我建议:
见regex demo
Python demo:
您可以在不使用regex的情况下以更快的方式执行此操作,如下所示:
相关问题 更多 >
编程相关推荐