Python - 如何删除汉字之间的空格,同时保留字符和数字之间的空格?
Python - How to remove spaces between Chinese characters while remaining the spaces in between a character and a number?
真正的问题可能更复杂,但现在,我正在努力完成一些更容易的事情。我试图删除 2 个 Chinese/Japanese 字符之间的 space,但同时保持数字和字符之间的 space。下面是一个例子:
text = "今天特别 热,但是我买了 3 个西瓜。"
我想要得到的输出是
text = "今天特别热,但是我买了 3 个西瓜。"
我尝试使用 Python 脚本和正则表达式:
import re
text = re.sub(r'\s(?=[^A-z0-9])','')
然而,结果是
text = '今天特别热,但是我买了 3个西瓜。'
所以我正在为如何始终保持字符和数字之间的 space 而苦恼?而且我不想使用在“3”和“个”之间添加space的方法。
我会继续考虑,但如果您有想法请告诉我...在此先感谢您!
我知道您需要删除的空格位于字母之间。
使用
re.sub(r'(?<=[^\W\d_])\s+(?=[^\W\d_])', '', text)
详情:
(?<=[^\W\d_])
- 正后视要求紧靠当前位置左侧的 Unicode 字母
\s+
- 1+ 个空格(如果只需要一个,则删除 +
)
(?=[^\W\d_])
- 要求当前位置右侧紧邻一个 Unicode 字母的正向预测。
您不需要 re.U
标志,因为它在 Python 3 中默认打开。但是您在 Python 2 中需要它。
您也可以使用捕获组:
re.sub(r'([^\W\d_])\s+([^\W\d_])', r'', text)
非消耗性环顾四周变成消耗性捕获组 ((...)
)。替换模式中的 </code> 和 <code>
是对捕获组值的反向引用。
看到一个Python 3 online demo:
import re
text = "今天特别 热,但是我买了 3 个西瓜。"
print(re.sub(r'(?<=[^\W\d_])\s+(?=[^\W\d_])', '', text))
// => 今天特别热,但是我买了 3 个西瓜。
真正的问题可能更复杂,但现在,我正在努力完成一些更容易的事情。我试图删除 2 个 Chinese/Japanese 字符之间的 space,但同时保持数字和字符之间的 space。下面是一个例子:
text = "今天特别 热,但是我买了 3 个西瓜。"
我想要得到的输出是
text = "今天特别热,但是我买了 3 个西瓜。"
我尝试使用 Python 脚本和正则表达式:
import re
text = re.sub(r'\s(?=[^A-z0-9])','')
然而,结果是
text = '今天特别热,但是我买了 3个西瓜。'
所以我正在为如何始终保持字符和数字之间的 space 而苦恼?而且我不想使用在“3”和“个”之间添加space的方法。
我会继续考虑,但如果您有想法请告诉我...在此先感谢您!
我知道您需要删除的空格位于字母之间。
使用
re.sub(r'(?<=[^\W\d_])\s+(?=[^\W\d_])', '', text)
详情:
(?<=[^\W\d_])
- 正后视要求紧靠当前位置左侧的 Unicode 字母\s+
- 1+ 个空格(如果只需要一个,则删除+
)(?=[^\W\d_])
- 要求当前位置右侧紧邻一个 Unicode 字母的正向预测。
您不需要 re.U
标志,因为它在 Python 3 中默认打开。但是您在 Python 2 中需要它。
您也可以使用捕获组:
re.sub(r'([^\W\d_])\s+([^\W\d_])', r'', text)
非消耗性环顾四周变成消耗性捕获组 ((...)
)。替换模式中的 </code> 和 <code>
是对捕获组值的反向引用。
看到一个Python 3 online demo:
import re
text = "今天特别 热,但是我买了 3 个西瓜。"
print(re.sub(r'(?<=[^\W\d_])\s+(?=[^\W\d_])', '', text))
// => 今天特别热,但是我买了 3 个西瓜。