如何在正则表达式匹配的字符串开头添加字符?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在正则表达式匹配的字符串开头添加字符?相关的知识,希望对你有一定的参考价值。
我有一些要对齐的数据(下)。
| 24 | 11 | 506 | -1 | -829.99||
| 24 | 11 | 1910 | 506 | 1 | 829.99|3|
| 12 | 11 | 1933 | 531 | 2 | 7.78 |N|
[每当倒数第二个值似乎为负时,该行就会遗漏“ |”定界符。我正在尝试使用正则表达式在记录的中间添加垂直条,以重新对齐数据,如下所示:
| 24 | 11 | | 506 | -1 | -829.99||
| 24 | 11 | 1910 | 506 | 1 | 829.99 | 3|
| 12 | 11 | 1933 | 531 | 2 | 7.78 | N|
忽略空白,出于这个问题的目的,我将其包括在内以使数据更具可读性。
我知道下面的表达式将找到正确的文本组并放置一个附加的“ |”在它之后,但是可以对其进行修改以放入“ |”在小组之前?
re.sub(r'(\|*\|*\|\|)', r'\1',DATA)
刚开始使用正则表达式,所以可以得到任何帮助!
P.S。 -我正在使用python进行此数据处理任务的实际正则表达式替换/添加。
您的正则表达式中存在一些问题。星号*
表示前一个元素(一个字符或复合字符)可以重复零次或多次。因此,\|*
将匹配“”(空字符串),“ |”,“ ||”等,而\|*\|*\|\|
将匹配两个连续的小节“ ||”前面带有任意数量的小节(0或更多)-因此,它仅与最后两个小节匹配。
[为了证明这一点,您可以使用re.sub
,用一些不同的字符包围后向引用(即\1
)(我在下面用大括号,即\1
)。
data="""| 24 | 11 | 506 | -1 | -829.99||
| 24 | 11 | 1910 | 506 | 1 | 829.99|3|
| 12 | 11 | 1933 | 531 | 2 | 7.78 |N|
"""
print("using regex above, with curly braces around captured match:")
print(re.sub(r'(\|*\|*\|\|)', r'\1', data))
print("desired output:")
print(re.sub(r'(\|[^|]+\|[^|]+\|[^|]+\|\|)', r'|\1', data))
输出:
using regex above, with curly braces around captured match:
| 24 | 11 | 506 | -1 | -829.99||
| 24 | 11 | 1910 | 506 | 1 | 829.99|3|
| 12 | 11 | 1933 | 531 | 2 | 7.78 |N|
desired output:
| 24 | 11 || 506 | -1 | -829.99||
| 24 | 11 | 1910 | 506 | 1 | 829.99|3|
| 12 | 11 | 1933 | 531 | 2 | 7.78 |N|
该解决方案会寻找在它们之间有正数个项目的条,而不是条。 [^|]
表示将匹配|
以外的任何内容。请注意,在括号中,该栏不需要转义。 +
表示“上一个元素中的一个或多个”。
以上是关于如何在正则表达式匹配的字符串开头添加字符?的主要内容,如果未能解决你的问题,请参考以下文章
求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式
求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式
求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式
求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式