我有一个数据框:
d1 ={'letters':['ABCDE[NOT]FGH', 'CCGF[NOT]HI', 'MPJ[NOT]L', 'MNA[NOT]PLJKAJSHD']}
df1 = pd.DataFrame(d1)
df1:
letters
0 ABCDE[NOT]FGH
1 CCGF[NOT]HI
2 MPJ[NOT]L
3 MNA[NOT]PLJKAJSHD
我想在每个字符之间创建一个空格,除了[]之间的空格
期望输出:
letters
0 A B C D E [NOT] F G H
1 C C G F [NOT] H I
2 M P J [NOT] L
3 M N A [NOT] P L J K A J S H D
我试过:
matching = re.sub(r'[^a-zA-Z []]+(?![^{]*})(\w)', r'\1', i)
df1['letters'].apply(lambda x: matching)
但这似乎不起作用。 有什么想法吗
尽管效率极低,但您可以使用此选项并避免后期处理:
(?=
-开始一个前瞻(?!^)
-不要断言字符串的开头[^\[\]]*?\[
-断言任何指向开口括号的位置[
|
-或[^\[\]]+$
-断言任何不是指向行末尾的括号的位置)
-关闭“向前看”https://regex101.com/r/zoHEne/1/
注意:regex101示例仅因多行而具有尾随空格。一次测试一行,以确保没有尾随空格
您可以使用
re.findall
:您可以向每个
[...]
子字符串或字符串中找到的任何其他字符追加一个空格,然后rstrip
返回结果:见this regex demo
另一种方法是在与
\[[^][]*]
模式匹配的字符之外的任何字符周围添加空格,然后str.strip()
返回结果:(\[[^][]*])|.
正则表达式匹配并捕获到组1中的[
,然后是除[
和]
之外的任何零个或多个字符,然后是]
字符,或除换行字符以外的任何字符,如果捕获到,则替换为组1值,否则替换为“空格”+匹配值+“空格”如果替换操作中出现任何前导/尾随空格,则
str.strip()
将删除这些空格相关问题 更多 >
编程相关推荐