【问题标题】:Regex: Add space after a number when followed by letter正则表达式:在数字后跟字母时添加空格
【发布时间】:2020-04-30 15:14:44
【问题描述】:

在一组数字之后,我想在字符串中添加一个空格。例如,以下字符串应在数字后添加一个空格:

Before                           After
"0ABCD TECHNOLOGIES SERVICES"    "0 ABCD TECHNOLOGIES SERVICES"
"ABCD0 TECHNOLOGIES SERVICES"    "ABCD 0 TECHNOLOGIES SERVICES"

"ABCD 0TECHNOLOGIES SERVICES"    "ABCD 0 TECHNOLOGIES SERVICES"
"ABCD TECHNOLOGIES0 SERVICES"    "ABCD TECHNOLOGIES 0 SERVICES"

"ABCD TECHNOLOGIES 0SERVICES"    "ABCD TECHNOLOGIES 0 SERVICES"
"ABCD TECHNOLOGIES SERVICES0"    "ABCD TECHNOLOGIES SERVICES 0"

我一直在尝试通过以下方式在 Python 中处理正则表达式:

text= re.sub(r'([0-9]+)?([A-Za-z]+)?([0-9]+)?',
             r'\1 \2 \3',
             text,
             0,
             re.IGNORECASE)

使用前面的代码,我得到了影响其他正则表达式转换的不需要的空格:

"0 abcd     technologies     services   "

如何在字符串中添加空格而不添加不需要的空格?

【问题讨论】:

    标签: python regex regexp-replace


    【解决方案1】:

    你可以使用

    re.sub(r'(?<=\d)(?=[^\d\s])|(?<=[^\d\s])(?=\d)', ' ', text)
    

    请参阅regex demo

    模式详情

    • (?&lt;=\d)(?=[^\d\s]) - 数字和字符之间的位置,而不是数字和空格
    • | - 或
    • (?&lt;=[^\d\s])(?=\d) - 字符而非数字与空格和数字之间的位置。

    Python test:

    import re
    tests = ['0ABCD TECHNOLOGIES SERVICES',
    'ABCD0 TECHNOLOGIES SERVICES',
    'ABCD 0TECHNOLOGIES SERVICES',
    'ABCD TECHNOLOGIES0 SERVICES',
    'ABCD TECHNOLOGIES 0SERVICES',
    'ABCD TECHNOLOGIES SERVICES0']
    
    rx = re.compile(r'(?<=\d)(?=[^\d\s])|(?<=[^\d\s])(?=\d)')
    
    for test in tests:
        print(rx.sub(' ', test))
    

    输出:

    0 ABCD TECHNOLOGIES SERVICES
    ABCD 0 TECHNOLOGIES SERVICES
    ABCD 0 TECHNOLOGIES SERVICES
    ABCD TECHNOLOGIES 0 SERVICES
    ABCD TECHNOLOGIES 0 SERVICES
    ABCD TECHNOLOGIES SERVICES 0
    

    【讨论】:

    • 非常感谢您的解释:)
    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2014-04-29
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多