SAS/Python:查找任何后跟非空格字符串的空格并用不同的值替换空格

问题描述

我有这样的数据:

1937   Paredes         3-1
1939   Suazo            2-0
1941   Fernandez     4-0
1944   Wilchez        2-1
…   
2017   Miralles       5-7

我想将每一行作为一行文本阅读。查找后跟数字、字符或任何非空格符号的空格的任何实例。用“|”替换该数字、字符或任何非空格符号之前的空格方式如下:

1937  |Paredes        |3-1
1939  |Suazo           |2-0
1941  |Fernandez    |4-0
1944  |Wilchez       |2-1
...
2017  |Miralles       |5-7

知道如何在 SAS 或 Python 中做到这一点吗?

解决方法

您可以使用 re.sub 匹配空格并在右侧断言非空白字符:

import re

test_str = ("1937 Paredes 3-1\n\n"
            "1939 Suazo 2-0\n\n"
            "1941 Fernandez 4-0\n\n"
            "1944 Wilchez 2-1")

result = re.sub(r" (?=\S)","|",test_str)
if result:
    print (result)

输出

1937|Paredes|3-1

1939|Suazo|2-0

1941|Fernandez|4-0

1944|Wilchez|2-1

或者找到多个没有换行符的空白字符

result = re.sub(r"[^\S\r\n]+(?=\S)",test_str)
,

我不明白保留其他空间的必要性。为什么不把它们全部删除?

data _null_;
  infile 'have.txt' truncover;
  file 'want.txt' dsd dlm='|';
  input (var1-var3) (:$100.);
  put var1-var3;
run;

结果

1937|Paredes|3-1
1939|Suazo|2-0
1941|Fernandez|4-0
1944|Wilchez|2-1
2017|Miralles|5-7