উত্তর:
.title()
একটি স্ট্রিং (হয় হওয়া ASCII বা ইউনিকোড হয় জরিমানা) এর পদ্ধতি এই আছে:
>>> "hello world".title()
'Hello World'
>>> u"hello world".title()
u'Hello World'
যাইহোক, এম্বেড থাকা এস্ট্রোফেসগুলি সহ স্ট্রিংগুলি সন্ধান করুন, যেমন ডক্সে উল্লিখিত হয়েছে।
অ্যালগরিদম একটানা অক্ষরের গ্রুপ হিসাবে শব্দের একটি সহজ ভাষা-স্বতন্ত্র সংজ্ঞা ব্যবহার করে। সংজ্ঞাটি অনেক প্রসঙ্গে কাজ করে তবে এর অর্থ হ'ল সংকোচনগুলিতে অ্যাড্রোফেসগুলি শব্দ সীমানা গঠন করে, যা পছন্দসই ফলাফল নাও হতে পারে:
>>> "they're bill's friends from the UK".title() "They'Re Bill'S Friends From The Uk"
"e g 3b"
পছন্দসই ফলাফল হবে "E G 3b"
। তবে, "e g 3b".title()
রিটার্ন "E G 3B"
।
In [2]: 'tEst'.title() Out[2]: 'Test'
.title()
পদ্ধতি ভাল কাজ করতে পারে না,
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
string.capwords()
পদ্ধতি চেষ্টা করুন ,
import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"
ক্যাপওয়ার্ডগুলিতে পাইথন ডক্স থেকে :
স্ট্রিং স্প্লিট () ব্যবহার করে যুক্তিগুলিকে শব্দের মধ্যে বিভক্ত করুন, প্রতিটি শব্দকে স্ট্র্যাপএপিটালাইজ () ব্যবহার করে মূলধন করুন এবং স্ট্রিয়রজাইন () ব্যবহার করে মূলধরনের শব্দগুলিতে যোগ করুন। Alচ্ছিক দ্বিতীয় আর্গুমেন্টের সেপটি অনুপস্থিত বা কোনও নয়, শ্বেতস্পেসের অক্ষরগুলির একক স্থান দ্বারা প্রতিস্থাপন করা হয় এবং নেতৃস্থানীয় এবং অনুসরণকারী শ্বেতস্পেস সরানো হয়, অন্যথায় সেপ শব্দের বিভক্ত হয়ে যোগ দিতে ব্যবহৃত হয়।
"There once was a string with an 'that had words right after it and then closed'"
। এই উদাহরণের সাথে বাদে সমস্ত পৃথিবী that
প্রত্যাশার মতো মূলধন হয়ে থাকে। ফলাফল হচ্ছে"There Once Was A String With An 'that Had Words Right After It And Then Closed'"
title()
সাধারণ পরিস্থিতির চেয়ে ভাল কাজ করে । আমার পরিস্থিতিতে, title()
অ্যাকসেন্টস বা ডায়ারেসিস সহ নামেরগুলির জন্য খারাপ আউটপুট দেয়, যখন capwords()
এটি সঠিকভাবে পরিচালনা করে।
এই ধরণের জিনিসটি আমার কাছে মজাদার কারণ, এখানে আরও দুটি সমাধান।
শব্দের মধ্যে বিভক্ত করুন, বিভক্ত দলগুলি থেকে প্রতিটি শব্দকে প্রাথমিক ক্যাপ করুন এবং আবার যোগদান করুন। এটি শব্দের পৃথক করে একটি একক সাদা স্পেসে সাদা স্থান পরিবর্তন করবে, তা সে যাই হোক না কেন।
s = 'the brown fox'
lst = [word[0].upper() + word[1:] for word in s.split()]
s = " ".join(lst)
সম্পাদনা: উপরের কোডটি লেখার সময় আমি কী ভাবছিলাম তা মনে নেই, তবে সুস্পষ্ট তালিকা তৈরি করার দরকার নেই; অলস ফ্যাশনে এটি করার জন্য আমরা একটি জেনারেটর এক্সপ্রেশন ব্যবহার করতে পারি। সুতরাং এখানে একটি ভাল সমাধান:
s = 'the brown fox'
s = ' '.join(word[0].upper() + word[1:] for word in s.split())
স্ট্রিংয়ের শুরুর সাথে মিলে বা নিয়মিত সাদা স্থান পৃথক শব্দের সাথে একটি একক অ-হোয়াইটস্পেস অক্ষর ব্যবহার করতে একটি নিয়মিত অভিব্যক্তি ব্যবহার করুন; "ম্যাচ গ্রুপ" চিহ্নিত করতে প্রথম বন্ধনী ব্যবহার করুন। কোনও ফাংশন লিখুন যা কোনও ম্যাচ অবজেক্ট নিয়ে যায় এবং সাদা স্থানের ম্যাচ গ্রুপটি অপরিবর্তিত এবং উচ্চ-ক্ষেত্রে সাদা-স্থানের অক্ষরের সাথে মিলিত গোষ্ঠীটি প্রদান করে। তারপরে re.sub()
নিদর্শনগুলি প্রতিস্থাপন করতে ব্যবহার করুন । এটির মধ্যে প্রথম দ্রবণের বিরামচিহ্ন সমস্যা নেই বা এটি আমার প্রথম সমাধানের মতো শ্বেত স্থানটিকে আবারও করতে পারে না। এই এক সেরা ফলাফল উত্পাদন করে।
import re
s = 'the brown fox'
def repl_func(m):
"""process regular expression match groups for word upper-casing problem"""
return m.group(1) + m.group(2).upper()
s = re.sub("(^|\s)(\S)", repl_func, s)
>>> re.sub("(^|\s)(\S)", repl_func, s)
"They're Bill's Friends From The UK"
আমি এই উত্তরটি গবেষণা করে আনন্দিত। আমার কোনও ধারণা ছিল না যা কোনও re.sub()
ফাংশন নিতে পারে! আপনি re.sub()
চূড়ান্ত ফলাফল উত্পাদন করতে ভিতরে অনানুক্রমিক প্রক্রিয়াজাতকরণ করতে পারেন !
string.capwords
চেন হউউউর উত্তর নথিভুক্ত অনুসারে এটি যা ঘটে তা উপস্থিত হয় ।
এটি করার বিভিন্ন উপায়ের সংক্ষিপ্তসার এখানে, তারা এই সমস্ত ইনপুটগুলির জন্য কাজ করবে:
"" => ""
"a b c" => "A B C"
"foO baR" => "FoO BaR"
"foo bar" => "Foo Bar"
"foo's bar" => "Foo's Bar"
"foo's1bar" => "Foo's1bar"
"foo 1bar" => "Foo 1bar"
- সবচেয়ে সহজ সমাধানটি হ'ল বাক্যকে শব্দের মধ্যে বিভক্ত করা এবং প্রথম অক্ষরকে মূলধন দিয়ে তারপরে আবার যুক্ত করুন:
# Be careful with multiple spaces, and empty strings
# for empty words w[0] would cause an index error,
# but with w[:1] we get an empty string as desired
def cap_sentence(s):
return ' '.join(w[:1].upper() + w[1:] for w in s.split(' '))
- আপনি যদি প্রথমে শব্দগুলিতে ইনপুট স্ট্রিংটি বিভক্ত করতে চান না এবং অভিনব জেনারেটর ব্যবহার করে:
# Iterate through each of the characters in the string and capitalize
# the first char and any char after a blank space
from itertools import chain
def cap_sentence(s):
return ''.join( (c.upper() if prev == ' ' else c) for c, prev in zip(s, chain(' ', s)) )
- অথবা ইটারটুলগুলি আমদানি না করে:
def cap_sentence(s):
return ''.join( (c.upper() if i == 0 or s[i-1] == ' ' else c) for i, c in enumerate(s) )
- বা আপনি স্টিভার উত্তর থেকে নিয়মিত প্রকাশ করতে পারেন :
# match the beginning of the string or a space, followed by a non-space
import re
def cap_sentence(s):
return re.sub("(^|\s)(\S)", lambda m: m.group(1) + m.group(2).upper(), s)
এখন, এগুলি পোস্ট করা হয়েছিল এমন আরও কিছু উত্তর এবং ইনপুটগুলি যার জন্য তারা প্রত্যাশার মতো কাজ করে না যদি আমরা কোনও শব্দের সংজ্ঞা শূন্যের পরে বা কোনও ফাঁকা জায়গার পরে ব্যবহার করি:
return s.title()
# Undesired outputs:
"foO baR" => "Foo Bar"
"foo's bar" => "Foo'S Bar"
"foo's1bar" => "Foo'S1Bar"
"foo 1bar" => "Foo 1Bar"
return ' '.join(w.capitalize() for w in s.split())
# or
import string
return string.capwords(s)
# Undesired outputs:
"foO baR" => "Foo Bar"
"foo bar" => "Foo Bar"
বিভাজনের জন্য '' ব্যবহার করা দ্বিতীয় আউটপুট ঠিক করবে, তবে ক্যাপওয়ার্ডগুলি () এখনও প্রথমটির জন্য কাজ করবে না
return ' '.join(w.capitalize() for w in s.split(' '))
# or
import string
return string.capwords(s, ' ')
# Undesired outputs:
"foO baR" => "Foo Bar"
একাধিক ফাঁকা জায়গাগুলি সম্পর্কে সতর্কতা অবলম্বন করুন
return ' '.join(w[0].upper() + w[1:] for w in s.split())
# Undesired outputs:
"foo bar" => "Foo Bar"
lower 123 upper
ফিরে আসা উচিত lower 123 Upper
, যেখানে upper
এটি একটি সংখ্যার অনুসরণ করে মূলধন হয়। আমি জানি এটি ওপি-র প্রশ্নের পরিধি ছাড়িয়ে গেছে তবে আপনার ইতিমধ্যে বিস্তৃত উত্তরের একটি চমৎকার অ্যাড-অন। আগাম ধন্যবাদ.
"([0-9]+)(\s+.)"
পরিবর্তে "(^|\s)(\S)"
(এক বা একাধিক সংখ্যার সাথে মিলিত হবো , তারপরে এক বা একাধিক স্পেস এবং তারপরে যেকোনো চর) বা "([0-9]+)(\s*.)"
যদি আপনি 'শূন্য বা তার বেশি' স্পেস পরে অক্ষরটি বড় করতে চান তবে সংখ্যা
WW1 - the great war
এবং WW1 - The Great War
পরিবর্তে আউটপুট নিতে পরিবর্তন করবেন Ww1 ...
। সংক্ষেপে সমস্যাটি দেখুন? আপনি কি এমন কিছু যুক্ত করতে ইচ্ছুক যা এই কেসটি দেখায়? আমি এই সম্পর্কে কিছুক্ষণের জন্য ভাবছিলাম এবং এটি করার কোনও উপায় ভাবতে পারি না।
WW1
আউটপুটটি হবেWW1
@ জিবেরিয়া আনসারের কপি-পেস্ট-রেডি সংস্করণ:
def capitalize(line):
return ' '.join(s[:1].upper() + s[1:] for s in line.split(' '))
str.join
জেনারেটর গ্রহণ করে।
join
জেন এক্সপস গ্রহণ str.join
করে, বিশেষত ক্ষেত্রে এটি সাধারণত তালিকা বোঝার জন্য পছন্দ করা হয়। কারণ join
আর্গুমেন্টের দ্বিগুণ পুনরুক্তি হয় এবং তাই কোনও জেনারেটরের পরিবর্তে প্রস্তুত-প্রস্তুত তালিকাগুলি সরবরাহ করা আরও দ্রুত।
str.join
পুনরাবৃত্তি করতে হবে কেন ? আমি শুধু পরীক্ষা করেছিলাম - এটি হয় না। যদিও ছোট সিকোয়েন্সের জন্য তালিকাটি উপলব্ধি দ্রুততর।
যখন সমাধানটি সহজ এবং নিরাপদ হয় তখন আপনি কেন নিজের জীবন যোগদানের সাথে এবং লুপগুলিতে জটিল করেন?
শুধু এটি করুন:
string = "the brown fox"
string[0].upper()+string[1:]
"the brown fox".capitalize()
?
'this is John'
রূপান্তর করতে চাই না 'This is john'
।
string.capitalize()
(মূলত @ লকাইডোনাল্ডস প্রতিধ্বনিত)
Str.title () যদি আপনার পক্ষে কাজ না করে তবে নিজেই মূলধনটি করুন।
এক রৈখিক:
>>> ' '.join([s[0].upper() + s[1:] for s in "they're bill's friends from the UK".split(' ')])
"They're Bill's Friends From The UK"
সুস্পষ্ট উদাহরণ:
input = "they're bill's friends from the UK"
words = input.split(' ')
capitalized_words = []
for word in words:
title_case_word = word[0].upper() + word[1:]
capitalized_words.append(title_case_word)
output = ' '.join(capitalized_words)
কেবল যদি আপনি প্রথম অক্ষর চান:
>>> 'hello world'.capitalize()
'Hello world'
তবে প্রতিটি শব্দকে মূলধন করতে:
>>> 'hello world'.title()
'Hello World'
'hello New York'.capitalize()
হল'Hello new york'
আপনি [1:] অ্যাক্সেস করলে একটি খালি স্ট্রিং একটি ত্রুটি বাড়িয়ে তুলবে, সুতরাং আমি এটি ব্যবহার করব:
def my_uppercase(title):
if not title:
return ''
return title[0].upper() + title[1:]
প্রথম অক্ষরের বড় হাতের অক্ষর।
str.capitalize
জন্য নয়?
return title[:1].upper() + title[1:]
খালি স্ট্রিংটি
মার্ক নির্দেশিত হিসাবে আপনার ব্যবহার করা উচিত .title()
:
"MyAwesomeString".title()
তবে, যদি একটি জাঙ্গো টেমপ্লেটের অভ্যন্তরে প্রথম অক্ষরের বড় হাতের অক্ষর তৈরি করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:
{{ "MyAwesomeString"|title }}
বা একটি ভেরিয়েবল ব্যবহার:
{{ myvar|title }}
প্রস্তাবিত পদ্ধতি str.title () সমস্ত ক্ষেত্রে কাজ করে না। উদাহরণ স্বরূপ:
string = "a b 3c"
string.title()
> "A B 3C"
পরিবর্তে "A B 3c"
।
আমি মনে করি, এটির মতো কিছু করা ভাল:
def capitalize_words(string):
words = string.split(" ") # just change the split(" ") method
return ' '.join([word.capitalize() for word in words])
capitalize_words(string)
>'A B 3c'
যদিও সমস্ত উত্তর ইতিমধ্যে সন্তোষজনক তবে আমি পূর্বের সমস্ত ক্ষেত্রে 2 টি অতিরিক্ত কেস কভার করার চেষ্টা করব।
যদি স্থানগুলি অভিন্ন না হয় এবং আপনি একই বজায় রাখতে চান
string = hello world i am here.
যদি সমস্ত স্ট্রিং বর্ণমালা থেকে শুরু না হয়
string = 1 w 2 r 3g
এখানে আপনি এটি ব্যবহার করতে পারেন
def solve(s):
a = s.split(' ')
for i in range(len(a)):
a[i]= a[i].capitalize()
return ' '.join(a)
এই আপনাকে দেবে
output = Hello World I Am Here
output = 1 W 2 R 3g
আমি আশা করি এটি অনর্থক নয়।
শব্দ মূলধন করতে ...
str = "this is string example.... wow!!!";
print "str.title() : ", str.title();
@ গ্যারি0২১২7 মন্তব্য, নীচে অ্যাডাস্ট্রোফ সহ সমাধানের শিরোনাম
import re
def titlecase(s):
return re.sub(r"[A-Za-z]+('[A-Za-z]+)?", lambda mo: mo.group(0)[0].upper() + mo.group(0)[1:].lower(), s)
text = "He's an engineer, isn't he? SnippetBucket.com "
print(titlecase(text))
সাদা স্থান সংরক্ষণ উপেক্ষা করবেন না। আপনি যদি প্রক্রিয়া করতে চান 'fred flinstone'
এবং 'Fred Flinstone'
পরিবর্তে পেতে চান তবে আপনি 'Fred Flinstone'
নিজের সাদা স্থানটিকে দূষিত করেছেন। উপরের সমাধানগুলির কয়েকটি সাদা স্থান হারাবে। পাইথন 2 এবং 3 এর পক্ষে ভাল এবং সাদা স্থান সংরক্ষণ করে এমন একটি সমাধান এখানে।
def propercase(s):
return ''.join(map(''.capitalize, re.split(r'(\s+)', s)))
পাইথন 3 এর জন্য একটি দ্রুত ফাংশন কাজ করেছিল
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> capitalizeFirtChar = lambda s: s[:1].upper() + s[1:]
>>> print(capitalizeFirtChar('помните своих Предковъ. Сражайся за Правду и Справедливость!'))
Помните своих Предковъ. Сражайся за Правду и Справедливость!
>>> print(capitalizeFirtChar('хай живе вільна Україна! Хай живе Любовь поміж нас.'))
Хай живе вільна Україна! Хай живе Любовь поміж нас.
>>> print(capitalizeFirtChar('faith and Labour make Dreams come true.'))
Faith and Labour make Dreams come true.
অ-ইউনিফর্ম স্পেস সহ স্ট্রিং মূলধন করুন
ঠিক আছে, আমি বুঝতে পেরেছি এটি একটি পুরানো প্রশ্ন এবং সম্ভবত উত্তরগুলি প্রায় ক্লান্ত হয়ে পড়েছে, তবে আমি @ অমিত গুপ্তের অ-অভিন্ন জায়গাগুলি যুক্ত করতে চাই। মূল প্রশ্ন থেকে, আমরা স্ট্রিংয়ের প্রতিটি শব্দকে মূলধন করতে চাই s = 'the brown fox'
। স্ট্রিংটি s = 'the brown fox'
অ-ইউনিফর্ম স্পেস সহ হলে কী হবে ।
def solve(s):
# if you want to maintain the spaces in the string, s = 'the brown fox'
# use s.split(' ') instead of s.split().
# s.split() returns ['the', 'brown', 'fox']
# while s.split(' ') returns ['the', 'brown', '', '', '', '', '', 'fox']
capitalized_word_list = [word.capitalize() for word in s.split(' ')]
return ' '.join(capitalized_word_list)
** আপনি কমে যেতে চাইলে **
#Assuming you are opening a new file
with open(input_file) as file:
lines = [x for x in reader(file) if x]
#for loop to parse the file by line
for line in lines:
name = [x.strip().lower() for x in line if x]
print(name) #check the result
আমি এই উত্তরটি সত্যিই পছন্দ করি:
@ জিবেরিয়া আনসারের কপি-পেস্ট-রেডি সংস্করণ:
def capitalize(line):
return ' '.join([s[0].upper() + s[1:] for s in line.split(' ')])
তবে কিছু লাইন যা আমি প্রেরণ করছিলাম কিছু ফাঁকা অক্ষরগুলি বিভক্ত হয়ে গিয়েছিল যা এর চেষ্টা করার সময় ত্রুটি ঘটেছে [1:]। এটি করার সম্ভবত আরও ভাল উপায় আছে তবে আমাকে যেমনটি হিসাবে লেন (গুলি)> 0 তে যুক্ত করতে হয়েছিল
return ' '.join([s[0].upper() + s[1:] for s in line.split(' ') if len(s)>0])
" ".join(w.capitalize() for w in s.split())