Python从文件中的正则表达式子字符串匹配中删除空格

Python从文件中的正则表达式子字符串匹配中删除空格,python,regex,replace,Python,Regex,Replace,我正在读取一个文件,并试图用该匹配替换正则表达式匹配的每一次出现,但删除了空白。例如,与文档中所需内容正确匹配的正则表达式是“([0-9]+\s(st|nd | rd | th)),因此表单文档中的任何内容都 第一,二,三十三,一百三十四等将会配对 我想要的是简单地编写一个新文件,用删除的空白替换原始文件中的每个引用 我玩过一些东西,比如re.findall和re.sub,但我不太明白如何编写完整的文档,只替换了子字符串匹配,没有空格 谢谢你的帮助 替换为删除的空白 尝试使用 上面的正则表达式

我正在读取一个文件,并试图用该匹配替换正则表达式匹配的每一次出现,但删除了空白。例如,与文档中所需内容正确匹配的正则表达式是“([0-9]+\s(st|nd | rd | th)),因此表单文档中的任何内容都

第一,二,三十三,一百三十四等将会配对

我想要的是简单地编写一个新文件,用删除的空白替换原始文件中的每个引用

我玩过一些东西,比如re.findall和re.sub,但我不太明白如何编写完整的文档,只替换了子字符串匹配,没有空格

谢谢你的帮助

替换为删除的空白

尝试使用

上面的正则表达式将捕获数字之间的空格,后跟st、nd、rd、th中的任意一个。现在只需用空字符串替换所有空格

替换为删除的空白

尝试使用


上面的正则表达式将捕获数字之间的空格,后跟st、nd、rd、th中的任意一个。现在只需用空字符串替换所有空格。

如果我理解正确,您可以使用来实现这一点

不要在整个模式周围放置一个捕获组,而是在数字周围放置一个捕获组,在所选文本周围放置另一个捕获组,忽略空白

>>> import re
>>> text = 'foo bar 1 st, 2 nd, 33 rd, 134 th baz quz'
>>> re.sub(r'([0-9]+)\s+(st|nd|rd|th)\b', '\\1\\2', text)
另一种方法是使用


如果我理解正确,你可以用它来实现这一目标

不要在整个模式周围放置一个捕获组,而是在数字周围放置一个捕获组,在所选文本周围放置另一个捕获组,忽略空白

>>> import re
>>> text = 'foo bar 1 st, 2 nd, 33 rd, 134 th baz quz'
>>> re.sub(r'([0-9]+)\s+(st|nd|rd|th)\b', '\\1\\2', text)
另一种方法是使用


另一个不捕捉群体的把戏。您需要在正则表达式中添加单词边界,以便仅匹配数字与st、nd、ed或th字符串之间的空格。在替换部分中,匹配的空格替换为空字符串(即,通过
re.sub
删除匹配的空格)

>>重新导入
>>>text='foo 1街,2街,33街,第134街'

>>>re.sub(r’(?另一个不捕获组的技巧。您需要在正则表达式中添加单词边界,以便仅匹配数字与st或nd或ed或th字符串之间的空格。在替换部分,匹配的空格替换为空字符串(即,通过
re.sub
删除匹配的空格)

>>重新导入
>>>text='foo 1街,2街,33街,第134街'

>>>re.sub(r’(?etc
的意思是什么?
etc
的意思是什么?为什么两个都用(?=(?:))为什么两个都用(?=(?:)
>>> re.sub(r'(?<=[0-9])\s+(?=(?:st|nd|rd|th)\b)', '', text)
foo bar 1st, 2nd, 33rd, 134th baz quz
>>> import re
>>> text = 'foo 1 st, 2 nd, 33 rddfa,33 rd,bar 134 th'
>>> re.sub(r'(?<=\d)\s+(?=(?:st|nd|rd|th)\b)', r'', text)
'foo 1st, 2nd, 33 rddfa,33rd,bar 134th'