Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 如何忽略单词之间的空格而不忽略其他字符?_Python_Regex_Python 3.x - Fatal编程技术网

Python 如何忽略单词之间的空格而不忽略其他字符?

Python 如何忽略单词之间的空格而不忽略其他字符?,python,regex,python-3.x,Python,Regex,Python 3.x,我想重命名一长串文件名,使它们更易于搜索。自动生成的名称,因此存在一些奇怪的间距问题。我写了一个小python脚本,可以实现我想要的。但我不想删除单词之间的空白。例如,我有两个名字: 0 130 — HG — 1500 — 12" (Page 1 of 2) 01 30 — HD LOW POINT DRAIN 它们应为: 0130-HG-1500-12" 0130-HD LOW POINT DRAIN 到目前为止,我的代码是: import os import re f

我想重命名一长串文件名,使它们更易于搜索。自动生成的名称,因此存在一些奇怪的间距问题。我写了一个小python脚本,可以实现我想要的。但我不想删除单词之间的空白。例如,我有两个名字:

0 130 — HG — 1500 — 12"  (Page 1 of 2)  
01 30 — HD LOW POINT DRAIN  
它们应为:

0130-HG-1500-12"  
0130-HD LOW POINT DRAIN  
到目前为止,我的代码是:

import os
import re

for filename in os.listdir("."):
    if not filename.endswith(".py"):
        os.replace(filename, re.sub("[(].*?[)]", "",  # Remove anything between ()
                                    "".join(filename.split()  # Remove any whitespaces
                                            ).replace("—", "-")))  # Replace Em dash with hyphen  
一切正常,只是我想不出如何不把单词之间的空白去掉。

如果“单词”是指“由字母组成的字符串”,那么


re.sub(“(?你能告诉我作为
(?为什么这么简单的任务需要正则表达式?如果前面和后面的字符都是字母或数字,您可以简单地扫描文本并删除遇到的每个空格。将em破折号更改为连字符很简单,但您需要一点状态跟踪来删除括号。为什么正则表达式这不是一种更简单的方法吗?这不正是正则表达式所做的吗?不,不是。您使用的不是编程语言的本机结构,而是字符串文字和“正则表达式”,这完全是另一种语言,它在后台编译成一个不确定的有限自动机,具有复杂而非琐碎的实现像你这样一个小任务的机制就像用大锤打死一只苍蝇。此外,你的例子似乎对每个文件名进行了三次遍历,而你本可以很容易地编写一个精简的单次遍历算法!你能给我一个例子说明我是如何实现单次遍历算法的吗?这是我所能做到的精简。使用R我不懂Python,也不能在注释中发布代码。用另一种语言就足够了吗?
re.sub('((?<=[^a-zA-Z]) | (?=[^a-zA-Z]))', '', filename)
In [24]: re.sub('((?<=[^A-Z]) | (?=[^A-Z]))', '', '01 30 — HD LOW POINT DRAIN  ')
Out[24]: '0130—HD LOW POINT DRAIN'

In [25]: re.sub('((?<=[^A-Z]) | (?=[^A-Z]))', '', '0 130 — HG — 1500 — 12"')
Out[25]: '0130—HG—1500—12"'