Python regex,查找并替换第二个tab ch

2024-09-28 16:59:03 发布

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

我试图使用regex查找并替换字符串中的第二个制表符。在

booby = 'Joe Bloggs\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\r\n'

这很好:

^{pr2}$

此用于查找第二个制表符的正则表达式未按预期工作:

re.sub(r'(\t[^\t]*)\t',r'###', booby)

我得到的不是匹配和替换第二个选项卡,而是返回:

'###NULL\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\r\n'

我尝试过在r“”前面加上或不加上r“”,也确认了正则表达式在regex101.com上可以正常工作

编辑:我把原来的正则表达式换成了glibdud的高级正则表达式


Tags: 字符串recom编辑null选项卡制表符regex
3条回答

带正则表达式

这是我能找到的最短的正则表达式:

import re
booby = 'Joe Bloggs\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\r\n'
print re.sub(r'(\t.*?)\t', r'\1###', booby, 1)

它使用非贪心的.来确保它不会产生太多的标签。 It输出:

^{pr2}$

使用拆分和合并

如果其他索引需要正则表达式,它可能会变得难看。对于一般情况,可以使用split和{}:

n = 2
sep = '\t'
cells = booby.split(sep)
print sep.join(cells[:n]) + "###" + sep.join(cells[n:])

It输出:

^{pr2}$

你可能想得太多了。在

>>> text = 'Joe Bloggs\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\r\n'
>>> re.sub(r'(\t[^\t]*)\t', r'\1###', text, count=1)
'Joe Bloggs\tNULL###NULL\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\r\n'

只需将选项卡的第一个实例与任意数量的非选项卡后跟一个选项卡相匹配,然后将其替换为除最后一个选项卡之外的所有内容以及任何要替换它的内容。在

>>> re.sub(r'^((?:(?!\t).)*\t(?:(?!\t).)*)\t',r'\1###', booby)
'Joe Bloggs\tNULL###NULL\tNULL\tNULL\tNULL\tNULL\tNULL\tNULL\r\n'

你就快到了,在###之前加上\1

我提供了另一种解决方法,原因是:

^{pr2}$

相关问题 更多 >