python正则表达式在数字和给定字符之间添加空格

2024-09-30 01:28:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在寻找解决办法,但没有成功。我真的不擅长正则表达式。我试图在数字和字符之间添加一个空格

text = "Split XXTX99V 23...490V -23V 34-499V".

预期输出:Split XXTX99V 23...490 V -23 V 34-499 V

我的代码:

pattern = r'(?<=\d)V(?=[\s,-]|$)'
re.sub(pattern,' V', text, flags=re.I)
output: 
"Split XXTX99 V 23...490 V -23 V 34-499 V"

如何删除“XXTX99V”以添加空间


Tags: 代码textreoutput空间数字字符flags
3条回答

鉴于:

text = "Split XXTX99V 23...490V -23V 34-499V"

你可以做:

>>> re.sub(r'([ ]|^)([\d.-]+)(V)(?=[\s-]|$)', r'\1\2 \3', text)
Split XXTX99V 23...490 V -23 V 34-499 V

您还可以使用regexpypi module来获取V之前的位置,前提是前面有以单词边界开头的数字

在替换中使用空格

(?<=\b\d+)(?=V(?:[\s,-]|$))

解释

  • (?<=\b\d+)正向查找,断言左侧是一个单词边界,后跟1+个数字
  • (?=正向前瞻,断言右边的是
    • V逐字匹配
    • (?:[\s,-]|$)匹配列出的字符之一或字符串
  • )关闭前瞻

Regex demo和aPython demo using the regex module

import regex

text = "Split XXTX99V 23...490V -23V 34-499V"
pattern = r"(?<=\b\d+)(?=V(?:[\s,-]|$))"
print(regex.sub(pattern, ' ', text))

输出

Split XXTX99V 23...490 V -23 V 34-499 V

您可以将<letter><digits>V匹配并捕获到组1中,然后使用替换来匹配您的模式,然后分析作为替换参数传递的lambda中的match数据对象,并相应地进行替换

正则表达式看起来像

([A-Za-z]\d+V)|(?<=\d)V(?=[\s,-]|$)

regex demo。它基本上是([A-Za-z]\d+V)|YOUR_REGEX,其中(...)是λ中的x.group(1)值。见Python demo

import re
text = 'Split XXTX99V 23...490V -23V 34-499V'
pattern = r'([A-Za-z]\d+V)|(?<=\d)V(?=[\s,-]|$)'
print(re.sub(pattern, lambda x: x.group(1) or ' V', text, flags=re.I))
# => Split XXTX99V 23...490 V -23 V 34-499 V

相关问题 更多 >

    热门问题