我正在尝试使用perl regex进行一些复杂的匹配。在shell中,它看起来是:
cut -f6 file.txt | perl -ne 'chomp; $col=$_; $clipped = 0; foreach($col =~ m/(\d+)S/g){ $clipped +=$_;} print $col,"\t",$clipped,"\n";'这是可行的,但是这个脚本的下游部分花了很长时间,所以我想用python来代替。
为了清晰起见,perl行在文件的第六列中在字符"S“之前查找数字。可能有多个"S",因此它在任何"S“之前找到任何数字并存储,然后$clipped对这些数字进行汇总。如果列看起来像12S1I100M37S,那么对于前面的12S和末尾的37S,$clipped总共是49。它忽略了所有其他数字。
回到python:使用split()5,我可以将第六列传递给一个变量,但我不知道如何将它传递给subprocess.call('perl -ne等‘)。
有人能建议我如何做到这一点,或者如何使用python模块进行相同类型的匹配吗?
发布于 2017-05-04 15:58:51
很可能有一种更紧凑的方式来用Python编写这篇文章。这只是我的一次尝试,从字面上讲,这就是问题的定义/边界。总之,如果您想坚持使用re,那么使用模块无疑是一个简单的选择。
import re
def sum_str_digits(my_string):
split_string = re.split(r'(\d+)', my_string)
sums = 0
for index, string_piece in enumerate(split_string):
if string_piece == 'S':
sums += int(split_string[index - 1])
return sums
# For Python 2.x
print sum_str_digits(my_string='12S1I100M37S')
# Python 3.x
print(sum_str_digits(my_string='12S1I100M37S'))https://stackoverflow.com/questions/43787141
复制相似问题