CamelCase一个字符串-python

时间:2018-11-28 06:49:17

标签: python

例如,我有一个字符串  ST. PETER'S HOSPITAL OF DEMIGARGON, LLC.还有更多这样的字符串,其中空格,逗号,和句号.的位置是随机的。

期望的输出是-St. Peter's Hospital Of Demigargon, LLC.

什么是最好的方法?

这是我到目前为止尝试过的

for row in ws.iter_rows(min_row=2):
    split = row[0].value.split()
    finalname = ""
    for i, item in enumerate(split):

        if item != 'LLC':
            finalname+=item.title()
        else:
            finalname+= item

        if i != len(split) - 1:
            finalname+=" "

      print(finalname)

2 个答案:

答案 0 :(得分:0)

"ST. PETER'S HOSPITAL OF DEMIGARGON, LLC.".title().replace('Llc','LLC').replace("'S", "'s")

这只是将Llc'S视为特殊情况。

使用regex可以更高级。 re.sub()可以采用任意函数来计算匹配对象的替换值。

import re

IGNORED = {"LLC."}  # Add other special cases as needed.
string = "ST. PETER'S HOSPITAL OF DEMIGARGON, LLC."

def repl(m):
    if m.group() in IGNORED:
        return m.group()
    return m.group(1) + m.group(2).lower()  # Unlike .title(), works on "PETER'S".

re.sub("(\w)(\S*)", repl, string)  # groups: (1st letter)(not spaces)

答案 1 :(得分:0)

您可以尝试手动进行操作:

IGNORED_STRINGS = [
   'LLC.'
]

def to_camel_case(string_val):
  if string_val in IGNORED_STRINGS:
    return string_val
  else:
    return string_val[0] + (string_val[1:]).lower()


sample_string = "ST. PETER'S HOSPITAL OF DEMIGARGON, LLC."


camel_cased_string = " ".join([
    to_camel_case(string_val) 
    for string_val in sample_string.split(' ')
])

print(camel_cased_string)

我添加了IGNORED_STRINGS,因此您可以添加任何特殊情况,即LLC.