regex 正则表达式删除不重复的空格

dvtswwa3  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(82)

我用fitz从python中的PDF中获取名称信息。
问题是,大多数信息都有空格来匹配背景,这给了我给予例如:firstname =“P I E R R E“,lastname =“L E D U C D E C O L“。
我需要删除字符之间的空格,这些空格不紧挨着另一个空格
当然,在第一次我删除了所有的空间与“s/\s//g“,但为名称它给给予我“LEDUCDECOL“,我需要“LE DUC DE COL“。

ubbxdtey

ubbxdtey1#

您可以匹配单个空格``,并在重复捕获组中匹配可选的后续空格,这将保留捕获组中最后一次迭代的值(单个空格)。
在替换中,使用组1值,使用\1

( )*

如果你想匹配一个空格字符,你可以用\s替换空格,但注意它也可以匹配一个换行符:

\s(\s)*

参见regex demoPython demo
举例来说:

import re
 
strings = [
    "L E  D U C  D E  C O L",
    "a        b     c def g"
]
pattern = r" ( )*"
for s in strings:
    print(re.sub(pattern, r"\1", s))

输出

LE DUC DE COL
a b cdefg

如果你想匹配一个没有跟在另一个空格后面的空格,你可以使用一个负的lookahead,并在替换中使用一个空字符串:

(?! )

另一个regex demo

g52tjvyc

g52tjvyc2#

# doing it with no loop, just regex

firstname = "P I E R R E"
lastname = "L E  D U C  D E  C O L"

re.sub(r' ', '', firstname) + " " + " ".join([x.replace(" ", "") for x in re.split(r'\s{2}', lastname)])
'PIERRE LE DUC DE COL'

相关问题