【问题标题】:Python Regex remove space b/w a Bracket and NumberPython Regex 删除空格 b/w 括号和数字
【发布时间】:2020-09-28 09:44:38
【问题描述】:

Python,我有一个这样的字符串,输入:

IBNR    13,123   1,234  ( 556 )   ( 2,355 )  934 

需要的输出-:

删除括号和数字之间的空格

IBNR    13,123   1,234  (556)   (2,355)  934  

或删除括号:

IBNR   13,123   1,234  556  2,355  934  

我试过这个:

re.sub('(?<=\d)+ (?=\\))','',text1)

这解决了右手边,需要左边的帮助。

【问题讨论】:

  • 那你想要什么?去掉数字周围的括号?
  • re.sub(r'[()]', '', text1) 去掉括号
  • @js-on 你不需要转义正则表达式中的括号
  • @retnikt 很高兴知道,谢谢
  • 是的,要么删除数字周围的括号,要么删除括号和数字的空格。

标签: python python-3.x regex regex-lookarounds regex-group


【解决方案1】:

你可以使用

import re

data = """IBNR    13,123   1,234  ( 556 )   ( 2,355 )  934 """

def replacer(m):
    return f"({m.group(1).strip()})"

data = re.sub(r'\(([^()]+)\)', replacer, data)
print(data)
# IBNR    13,123   1,234  (556)   (2,355)  934 

或者完全去掉括号:

data = re.sub(r'[()]+', '', data)
# IBNR    13,123   1,234   556     2,355   934 

正如@JvdV 指出的那样,您最好使用

re.sub(r'\(\s*(\S+)\s*\)', r'\1', data)

【讨论】:

  • 很好,在第二个示例中,OP 想要替换括号和空格。也许稍微调整你的第二个例子。可能是这样的:data = re.sub(r'\(\s*|\s*\)', r'', data) 但我敢打赌可以做得更好 =)
  • @JvdV:为什么不呢,添加你的例子。
  • 酷,我改变了我的例子,但不确定前一个是否更快。
  • @JvdV:可能是的(尚未测试)。交替通常较慢。
【解决方案2】:

用这种模式转义括号:

(\w+\s+\d+,\d+\s+\d+,\d+\s+)\((\s+\d+\s+)\)(\s+)\((\s+\d+,\d+\s)\)(\s+\d+)

查看结果,包括替换:

https://regex101.com/r/ch6Jge/1

【讨论】:

    【解决方案3】:

    我很少使用前瞻,但我认为它可以满足您的需求。

    re.sub(r'\(\s(\d+(?:\,\d+)*)\s\)', r'\1', text1)
    

    【讨论】:

    • 您的表达式中没有任何前瞻。
    • 抱歉,措辞不准确。不是我的,而是你的。
    猜你喜欢
    • 1970-01-01
    • 2019-01-28
    • 2023-03-22
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多