替换逗号分隔字符串中间的下划线分隔子字符串

2024-09-27 04:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多行的文件,如下所示:

 'AMS_Investigation|txtt.co_BigtittedBlondOtherNight_1371078139195_+14155186442', {'cf:rv': '0'}

我想用另一个号码代替1371078139195(在本例中)。 我要替换的值始终位于第一个逗号分隔的单词中,并且始终是该单词中最后一个下划线分隔的值。 下面是我做这件事的方式,它很管用,但这似乎不体面和笨拙。在

^{pr2}$

有没有更简单的方法来替换(可能使用正则表达式)值?我无法想象这是最好的方法

我有几个答案,我必须强调,这是第二个强调的价值。以下是有效字符串:

line = "'AMS_Investigation|txtt.co_23456_BigtittedBlondOtherNight_1371078139195_+14155186442', {'cf:rv': '0'}"
line = "'AMS_Investigation|txtt.co_23456_BigtittedBlondOtherNight_1371078139195_14155186442', {'cf:rv': '0'}"
line = "'AMS_Investigation|txtt.co_1371078139195_BigtittedBlondOtherNight_1371078139195_1371078139195', {'cf:rv': '0'}"

在上面的情况下,字符串中的数字字符串不在最后第二个下划线之后。最后一部分可能是也可能不是全部数字(可以是+14155186442,也可以是14155186442)。抱歉,我没有在上面提到这个。在

A


Tags: 文件方法字符串line数字单词cf号码
3条回答

像这样?在

>>> line = "'AMS_Investigation|txtt.co_BigtittedBlondOtherNight_1371078139195_+14155186442', {'cf:rv': '0'}"
>>> re.subn('_(\d+)_', '_mynewnumber_', line, count=1) 
("'AMS_Investigation|txtt.co_BigtittedBlondOtherNight_mynewnumber_+14155186442', {'cf:rv': '0'}",
1)

使用正则表达式:

m = re.match("([^,]*_)([+]?[0-9]+)(_.*)", s)
if m:
    before = m.group(1)
    number = m.group(2)
    after = m.group(3)
    s = before + new_number(number) + after

意思是

  • [^,]*_=需要多少个字符而不是逗号,后跟下划线
  • [+]?[0-9]+=数字,可以前面加+
  • _.*=后面跟着的下划线

这是因为regexp匹配在默认情况下是“贪心”的,因此[^,]*将实际使用所有下划线,在最后一个匹配成功之前停止。在

例如,如果您需要使用分隔开的第二个最后一个下划线,则需要将表达式更改为

^{pr2}$

因此,要求在数字之后,逗号前至少有两个下划线。在

非正则表达式解决方案:

>>> strs = " 'AMS_Investigation|txtt.co_BigtittedBlondOtherNight_1371078139195_+14155186442', {'cf:rv': '0'}"
>>> first, sep, rest = strs.partition(',')
>>> lis = first.rsplit('_', 2)
>>> lis[1] = "1111111"
>>> "_".join(lis) + sep + rest
" 'AMS_Investigation|txtt.co_BigtittedBlondOtherNight_1111111_+14155186442', {'cf:rv': '0'}"

功能:

^{pr2}$

相关问题 更多 >

    热门问题