【问题标题】:How do I insert a space after and before a dash that is not already surrounded by spaces?如何在尚未被空格包围的破折号前后插入空格?
【发布时间】:2016-09-30 18:37:23
【问题描述】:

假设我有这些字符串:

string1= "Queen -Bohemian Rhapsody"

string2= "Queen-Bohemian Rhapsody"

string3= "Queen- Bohemian Rhapsody"

我希望他们都变成这样:

   string1= "Queen - Bohemian Rhapsody"
   string2= "Queen - Bohemian Rhapsody"
   string3= "Queen - Bohemian Rhapsody"

如何在 Python 中做到这一点?

谢谢!

【问题讨论】:

  • 在使用可选匹配限定符'?'之前和之后匹配可选空格并替换为规范化的'` - `'。另见docs.python.org/2/library/re.html#regular-expression-syntax
  • 您是指[ \t\n\r\f\v] 集合中的任何内容中的空格还是文字空格字符?例如,对于 "Queen\t-\tBohemian Rhapsody" 作为输入,您是否希望制表符保持原样,因为已经存在空格,或者替换为空格?

标签: python regex string


【解决方案1】:

你可以正则表达式:

import re
pat = re.compile(r"\s?-\s?") # \s? matches 0 or 1 occurenece of white space

# re.sub replaces the pattern in string
string1 = re.sub(pat, " - ", string1)
string2 = re.sub(pat, " - ", string2)
string3 = re.sub(pat, " - ", string3)

【讨论】:

  • 严格来说,这会覆盖原始字符串中存在的空白字符 "Queen\t-\tBohemian Rhapsody" -> "Queen - Bohemian Rhapsody" 如果这是可以接受的,那么这几乎肯定是最好的解决方案。如果要求只插入以前不存在的空格(否则不要触摸它),则需要另一种方法。
  • 这很有趣,我没想到。好吧,如果不允许更换,那么我想这个解决方案并不完美。
  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2020-11-21
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 2021-06-04
相关资源
最近更新 更多