python - 在 python 中替换它们之前存储定界符和定界符位置

标签 python python-3.x delimiter

我正在处理文本模式问题。我有以下输入 -

term = 'CG-14/0,2-L-0_2'

我需要从输入项中删除所有可能的标点符号(定界符)。基本上我需要输入项的以下输出 -

'CG1402L02'

在删除分隔符之前,我还需要存储(以任何格式(对象、字典、元组等))分隔符和分隔符的位置。

输出示例(如果以元组形式返回)-

((-,2), (/,5), (,,7), (-,9), (-,11), (_,13))

我能够使用以下 python 代码获得输出 -

re.sub(r'[^\w]', '', term.replace('_', ''))

但是如何在删除分隔符之前存储分隔符和分隔符位置(以最有效的方式)?

最佳答案

您可以简单地遍历 term 并在途中收集所有必要的信息:

from string import ascii_letters,digits

term = 'CG-14/0,2-L-0_2'

# defined set of allowed characters a-zA-Z0-9
# set lookup is O(1) - fast
ok = set(digits +ascii_letters)  

specials = {}
clean = []
for i,c in enumerate(term):
    if c in ok:
        clean.append(c)
    else:
        specials.setdefault(c,[])
        specials[c].append(i)

cleaned = ''.join(clean)

print(clean)
print(cleaned)
print(specials)

输出:

['C', 'G', '1', '4', '0', '2', 'L', '0', '2']     # list of characters in set ok 
CG1402L02                                         # the ''.join()ed list 

{'-': [2, 9, 11], '/': [5], ',': [7], '_': [13]}  # dict of characters/positions not in ok

参见:


你可以使用

specials = []

在迭代中:

else:
    specials.append((c,i)) 

获取元组列表而不是字典:

[('-', 2), ('/', 5), (',', 7), ('-', 9), ('-', 11), ('_', 13)]

关于python - 在 python 中替换它们之前存储定界符和定界符位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53565103/

相关文章:

python - SymPy 和 Sage 有什么区别?

python - rpy2 在 jupyter 实验室中将 python 对象转换为 R 对象

python-3.x - 从FeatureUnion +管道中获取特征名称

mysql - 从 phpMyAdmin 转储中删除 DELIMITER

java - 如何使用Scanner的分隔符方法

c++ - 我对如何在 C++ 中使用 getline 和 strtok 解析多个定界符感到很困惑

python - 无法在 Visual Studio Code 中调试 Flask 应用程序

python - 如何从弹性滚动结果更快地建立 Pandas 数据框?

Java Wildfly POST 方法 multipart/form-data : "Unable to get boundary..."

python - 错误 : ValueError: The last dimension of the inputs to `Dense` should be defined. 发现 `None`