正则表达式更改ASCII表格式

时间:2015-01-21 11:29:22

标签: python regex

我有一张这样的表:

head1   | head2 | head3
=======================
foo=bar | baz   | quuux

是否有正则表达式,用一行破折号代替等号线,但仅在表格中留下其他等号?由短划线组成的线必须与由等号组成的线长度相等。

预期输出

head1   | head2 | head3
-----------------------
foo=bar | baz   | quuux

我正在使用Python re库。

3 个答案:

答案 0 :(得分:2)

  

是否有正则表达式,用一行破折号替换等号行

我会这样做,

>>> import re
>>> s = '''head1   | head2 | head3
=======================
foo=bar | baz   | quuux'''
>>> for i in s.split('\n'):             # Splits the input according to the newline character and iterate through the contents.
        if re.match(r'^=+$', i):        # If the item has only equal signs then 
            print(i.replace('=', '-'))  # replace = with - dashes
        else:
            print(i)                    # else print the whole line


head1   | head2 | head3
-----------------------
foo=bar | baz   | quuux

答案 1 :(得分:1)

=(?=={2,}|$)

试试这个。-。见。演示。

https://regex101.com/r/tX2bH4/73

答案 2 :(得分:1)

如果您只有以==foo=bar开头的行,则可以使用正常的str.replace。

s="""
head1   | head2 | head3
=======================
foo=bar | baz   | quuux
"""
out  = ""

for line in s.splitlines(True):
    if line.startswith("="): # or if line[0]== "=" 
        out += line.replace("=", "-")
    else:
        out += line
print(out)
head1   | head2 | head3
-----------------------
foo=bar | baz   | quuux

这应该包括你只有行中的=并且比正则表达式更有效的情况:

for line in s.splitlines(True):
    if not line.rstrip().translate(None,"="): # or if line[0]== "="
        out += line.replace("=","-")
    else:
        out += line
print(out)