【问题标题】:Best way to split a string by two different delimiters, capitalize the two words encasing either delimiter only, and adding both delimiters back in?用两个不同的分隔符分割字符串的最佳方法,将两个单词大写,只包含一个分隔符,然后重新添加两个分隔符?
【发布时间】:2018-10-08 18:42:30
【问题描述】:

我正在编写一个 Python 脚本,它应该能够通过两个分隔符分割字符串:'_' 和 '.',将被分隔符分割的两个单词都大写(包含分隔符),然后最后有分隔符放回原来的位置。

类似:this_is.an_Example string for.You

应该变成:This_Is.An_Example string For.You

现在我有这个:return '_'.join(x.capitalize() for x in re.split('_|\.', str)) + '\n' 这并没有真正做到我想要的。

有什么干净的方法吗? 感谢您的帮助!

【问题讨论】:

  • 如果你的输入字符串是foo.bar bar_foo,你想要的输出是什么?
  • 应该是 Foo.Bar Bar_Foo :)
  • 您应该向当前的答案澄清这一点,它不遵循该模式
  • @user3483203 是的!我在下面的评论中做了,谢谢!!

标签: python regex string delimiter


【解决方案1】:

你可以使用

import re
s = "this_is.an_Example string for.You"
print(re.sub( r'(?<![^_.])[^\W_]+|[^\W_]+(?=[._])', lambda x: x.group().capitalize(), s))
# => This_Is.An_Example string For.You

请参阅 Python demoregex demo

模式详情

  • (?&lt;![^_.])[^\W_]+ - 1 个或多个数字或字母 ([^\W_]+),紧跟在 _. 或字符串开头
  • | - 或
  • [^\W_]+(?=[._]) - 1 个或多个数字或字母 ([^\W_]+),紧跟在 _. 或字符串结尾。

【讨论】:

  • 我在这里几乎有同样的情况:) 你也可以使用x.group().upper()
  • @Jean-FrançoisFabre 没错,只是使用了 OP 的方法,方法保持不变。
  • 我会在编辑之前等待澄清,我认为这对于要求是有道理的。它是由分隔符分隔的单词之一
  • lookbehind 有点神秘,但它是 Python 固定宽度lookbehinds 中唯一的方法。
  • @x0xchoc0late 不确定您的意思。也许this 会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2020-01-26
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多