Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 删除所有中文字符的空格,同时在Python正则表达式中保留必要的英文空格_Python 3.x_Regex_Pandas_Re - Fatal编程技术网

Python 3.x 删除所有中文字符的空格,同时在Python正则表达式中保留必要的英文空格

Python 3.x 删除所有中文字符的空格,同时在Python正则表达式中保留必要的英文空格,python-3.x,regex,pandas,re,Python 3.x,Regex,Pandas,Re,假设我的数据框中有一列混合了中英文单词或字符,如果它们是中文单词,我希望删除它们之间的所有空格,否则如果它们是英文单词,则在单词之间只保留一个空格: 我已经找到了一个解决方案,可以从 代码: 但正如您所看到的,它适用于英语,但没有删除中文之间的空格,如何才能得到如下预期结果: Out[87]: 0 Very calm 1 Keen and analytical 2 Rash and careless 3 Always joyful 4

假设我的数据框中有一列混合了中英文单词或字符,如果它们是中文单词,我希望删除它们之间的所有空格,否则如果它们是英文单词,则在单词之间只保留一个空格:

我已经找到了一个解决方案,可以从

代码:

但正如您所看到的,它适用于英语,但没有删除中文之间的空格,如何才能得到如下预期结果:

Out[87]: 
0              Very calm
1    Keen and analytical
2      Rash and careless
3          Always joyful
4                    你好
5                 黑石公司
dtype: object
参考资料:

您可以使用中文(嗯,CJK)
\p{script=Han}
\p{Han}

但是,只有当正则表达式引擎支持UTS#18 Unicode正则表达式时,这才有效。默认的Python re模块没有,但您可以使用替代方法(改进很多):

(演示仅用于演示目的)

您可以使用中文(嗯,CJK)
\p{script=Han}
\p{Han}

但是,只有当正则表达式引擎支持UTS#18 Unicode正则表达式时,这才有效。默认的Python re模块没有,但您可以使用替代方法(改进很多):


(演示仅出于演示目的使用PCRE)

在环视中使用单词边界
\b

(?<=\b\w\b) +(?=\b\w\b)
输出:

['Very calm', 'Keen and analytical', 'Rash and careless', 'Always joyful', '你好', '黑石公司']
0              Very calm
1    Keen and analytical
2      Rash and careless
3          Always joyful
4                     你好
5                   黑石公司
dtype: object

在环视中使用单词边界
\b

(?<=\b\w\b) +(?=\b\w\b)
输出:

['Very calm', 'Keen and analytical', 'Rash and careless', 'Always joyful', '你好', '黑石公司']
0              Very calm
1    Keen and analytical
2      Rash and careless
3          Always joyful
4                     你好
5                   黑石公司
dtype: object

这个正则表达式应该能满足你的需要。请参阅底部的完整代码片段

regex = re.compile(
    "((?<![a-zA-Z]{2})(?<=[a-zA-Z]{1})\s+(?=[a-zA-Z]\s|.$)|(?<=[\u4e00-\u9fff]{1})\s+)",
    re.UNICODE,
)
输出:

['Very calm', 'Keen and analytical', 'Rash and careless', 'Always joyful', '你好', '黑石公司']
0              Very calm
1    Keen and analytical
2      Rash and careless
3          Always joyful
4                     你好
5                   黑石公司
dtype: object

这个正则表达式应该能满足你的需要。请参阅底部的完整代码片段

regex = re.compile(
    "((?<![a-zA-Z]{2})(?<=[a-zA-Z]{1})\s+(?=[a-zA-Z]\s|.$)|(?<=[\u4e00-\u9fff]{1})\s+)",
    re.UNICODE,
)
输出:

['Very calm', 'Keen and analytical', 'Rash and careless', 'Always joyful', '你好', '黑石公司']
0              Very calm
1    Keen and analytical
2      Rash and careless
3          Always joyful
4                     你好
5                   黑石公司
dtype: object


单字母单词a和I怎么样?谢谢,伙计们。有很多好的选择。这是一个很好的问题@Bohemian,在一些罕见的情况下,例如
XYZ company
,只有一个空格应该被删除并获得
XYZ company
,事实上,我不知道如何解决这个问题。我已经为serie
s
更新了新元素,看来你的解决方案都不管用,因为它是中英文混合的。有人能帮我再测试一次吗?关于单字母单词
“a”
“I”
?谢谢,伙计们。有很多好的选择。这是一个很好的问题@Bohemian,在一些罕见的情况下,例如
XYZ company
,只有一个空格应该被删除并获得
XYZ company
,事实上,我不知道如何解决这个问题。我已经为serie
s
更新了新元素,看来你的解决方案都不管用,因为它是中英文混合的。有人能帮我再次测试吗?我使用
df['rent\u name']将您的代码应用到一列
rent\u name
。替换(re.compile(r)(?您是否使用
import regex as re
?是的,它会引发一个错误:
TypeError:replace()缺少1个必需的位置参数:“repl”
。如果
test\u str
是数据帧中的一列,我如何使用您的代码?我使用
df['rent\u name']将您的代码应用于一列
rent\u name
。replace(re.compile(r)(?您是否使用
import regex as re
?是的,它会引发错误:
TypeError:replace()缺少1个必需的位置参数:“repl”
。如果
test\u str
是数据帧中的一列,我如何使用您的代码?抱歉,您的解决方案似乎不适用于
FAN STUD1O
,我想我们可能需要
df['Day'].str.capitale()
然后应用你的代码?我会用一个更简单的正则表达式来处理这个问题,它将所有空格组合成一个字符串
s.str.replace(re.compile(“\s+”,re.UNICODE),”)
对不起,你的解决方案似乎不适用于
FAN STUD1O
,我想也许我们需要
df['Day'].str.capitalize()
然后应用您的代码?我会用一个更简单的正则表达式来处理这种情况,它将所有空格组合成一个字符串
s.str.replace(re.compile(“\s+”,re.UNICODE),”)
为什么需要
(?u)
?在Python3.x中它默认打开。@WiktorStribiżew我不知道。我是一个Python新手。回答简化和注释制作的Python版本。Thx为什么需要
(?u)
?在Python3.x中它默认打开。@WiktorStribiżew我不知道。我是Python新手。回答简化和注释制作的Python版本。Thx