これは奇妙なものです:
私はPythonで文字列をフォーマットしようとしています(明らかに)string.title()
.
これが私のコードです:
def format_trade_name(self):
tr_name = self.trade_name.title()
tr_cap = [
'oxy',
'depo',
'edex',
'emla',
'pred',
]
tr_join = '|'.join(tr_cap)
tr_regex = r'\b(?!(' +tr_join + r'))(\w{1,4})\b'
tr_matches = re.search(tr_regex, self.trade_name,re.IGNORECASE)
for i in tr_matches.groups():
if i is not None:
tr_name = re.sub(r'\b'+i+r'\b',i.upper(),tr_name)
return tr_name
問題は次のとおり
です。関数で各単語の最初の文字を大文字にし、4 文字の文字列 (tr_cap にはない) をすべて大文字に変換する必要があります。したがって、元の文字列が の場合tylenol depo er
、フォーマットされた文字列をTylenol Depo ER
2 行目を に変更するとtr_name = self.trade_name.capitalize()
、関数は( is not capitalized) に変わります。tylenol depo er
Tylenol depo ER
depo
2 行目をそのままにしておくと、 .title() を使用した後に書式設定が適用されたにもかかわらずtr_name = self.trade_name.title()
、関数がtylenol depo er
(Tylenol Depo Er
ではEr
なく大文字に変わります。
新しいフォーマットを適用しようとした後でも、文字列がタイトルケースに変換される理由を誰かに説明してもらえますか?
更新 だから私はそれを修正しましたが、なぜそれが機能するのかわかりません。欠けている重要な原則があるように感じます。
に変更tr_matches = re.search(tr_regex, self.trade_name,re.IGNORECASE)
するtr_matches = re.search(tr_regex, tr_name, re.IGNORECASE)
と動作します。
したがって、これは機能します:
def format_trade_name(self):
tr_name = self.trade_name.title()
tr_cap = [
'oxy',
'depo',
'edex',
'emla',
'pred',
]
tr_join = '|'.join(tr_cap)
tr_regex = r'\b(?!(' +tr_join + r'))(\w{1,4})\b'
tr_matches = re.search(tr_regex, tr_name ,re.IGNORECASE)
for i in tr_matches.groups():
if i is not None:
tr_name = re.sub(r'\b'+i+r'\b',i.upper(),tr_name)
return tr_name
理由はありますか?