我想用“ - ”替换文本中所有非大写单词。单词的长度。
例如,我有以下文字(德语):
Florian Homm wuchs als SohndesmittelständischenHandwerksunternehmersJoachim Homm und seiner Frau Maria-Barbara“Uschi”Homm im hessischen Bad Homburg vorderHöheauf。 SeinGroßonkelmütterlicherseitswarder Unternehmer Josef Neckermann。 Nach einem Studium an der Harvard University,das er mit einem工商管理硕士,哈佛商学院学位论文,开始于HommseineTätigkeitinder US-amerikanischen Finanzwirtschaft bei der Investmentbank Merrill Lynch,danach war er bei dem US-Fondsanbieter Fidelity Investments, der Schweizer PrivatbankJuliusBärunddem US-VermögensverwalterTweedyBrowne ....
应该转化为
Florian Homm ---- --- Sohn --- ------------ Handwerksunternehmers Joachim Homm --- ------ Frau Maria-Barbara“Uschi”Homm - ---------- Bad Homburg ---Höhe---。 ....
答案 0 :(得分:2)
▶ input.gsub(/\p{L}+/) { |m| m[0] != m[0].upcase ? '-'*m.length : m }
#⇒ "Florian Homm ----- --- Sohn --- ------------------ Handwerksunternehmers..."
更干净的解决方案(信用卡里):
▶ input.gsub(/(?<!\p{L})\p{Lower}+(?!\p{L})/) { |m| '-' * m.length }
答案 1 :(得分:1)
尝试这样的事情
$pres->attendance = $presentation->load(Yii::$app->request->post('attendance'));
$pres->couples = $presentation->load(Yii::$app->request->post('couples'));
// to this
$pres->attendance = $presentation->attendance;
$pres->couples = $presentation->couples;
答案 2 :(得分:1)
你可以尝试这样的小输入尺寸:
基本上,我:
喜欢这样
IndexedSeq[Char]
这是否适用于您的问题?
干杯!
编辑:要获得更具内存效率的解决方案,您可以使用正则表达式替换s = "Florian Homm wuchs als Sohn des mittelständischen Handwerksunternehmers Joachim Homm und seiner Frau Maria-Barbara „Uschi“ Homm im hessischen Bad Homburg vor der Höhe auf. Sein Großonkel mütterlicherseits war der Unternehmer Josef Neckermann. Nach einem Studium an der Harvard University, das er mit einem Master of Business Administration an der Harvard Business School abschloss, begann Homm seine Tätigkeit in der US-amerikanischen Finanzwirtschaft bei der Investmentbank Merrill Lynch, danach war er bei dem US-Fondsanbieter Fidelity Investments, der Schweizer Privatbank Julius Bär und dem US-Vermögensverwalter Tweedy Browne...."
s.split(/[[:space:]]/).map { |word| word.capitalize == word ? word : '-' * word.length }.join(' ')
,请查看mudasobwa的其他答案https://stackoverflow.com/a/41570686/4411941
答案 3 :(得分:0)
r = /
(?<![[:alpha:]]) # do not match a letter (negative lookbehind)
[[:lower:]] # match a lowercase letter
[[:alpha:]]* # match zero or more letters
/x # free-spacing regex definition mode
str = "Frau Maria-Barbara „Uschi“ Homm im hessischen Bad Homburg vor der Höhe auf."
str.gsub(r) { |m| '-'*m.size }
#=> "Frau Maria-Barbara „Uschi“ Homm -- ---------- Bad Homburg --- --- Höhe ---."
"die Richter/-innen".gsub(r) { |m| '-'*m.size }
#=> "--- Richter/------"
"Jede(r) Anwältin und Anwalt".gsub(r) { |m| '-'*m.size }
#=> "Jede(-) Anwältin --- Anwalt"
答案 4 :(得分:0)
这个问题比它看起来更难!
这段代码可能比其他代码更需要内存,但我敢说它适用于更广泛的(奇怪的)德语单词:
def hide_non_capitalized(text)
text.split(/[[:space:]]/).map do |chars|
first_letter = chars[/[[:alpha:]]/]
if first_letter && first_letter == first_letter.downcase
## Keep non-letters :
chars.gsub(/[[:alpha:]]/,'-')
## Replace every character :
# '-' * chars.size
else
chars
end
end.join(' ')
end
它将文本拆分为字符块,如果第一个字母是小写,则替换块的所有字母。这段代码需要Ruby 2.4,因为'ä'.upcase
仍然是'ä'
直到Ruby 2.3。
puts hide_non_capitalized(text)
#=> Florian Homm ----- --- Sohn --- ----------------- Handwerksunternehmers Joachim Homm --- ------ Frau Maria-Barbara „Uschi“ Homm -- ---------- Bad Homburg --- --- Höhe ---. Sein Großonkel ----------------- --- --- Unternehmer Josef Neckermann. Nach ----- Studium -- --- Harvard University, --- -- --- ----- Master -- Business Administration -- --- Harvard Business School ---------, ------ Homm ----- Tätigkeit -- --- US-amerikanischen Finanzwirtschaft --- --- Investmentbank Merrill Lynch, ------ --- -- --- --- US-Fondsanbieter Fidelity Investments, --- Schweizer Privatbank Julius Bär --- --- US-Vermögensverwalter Tweedy Browne....
hide_none = "Änderung. „Uschi“, Attaché-case Maria-Barbara US-Fondsanbieter. Die Richter/-innen. Jede(r) 1234 \"#+?\""
puts hide_non_capitalized(hide_none)
#=> Änderung. „Uschi“, Attaché-case Maria-Barbara US-Fondsanbieter. Die Richter/-innen. Jede(r) 1234 "#+?"
hide_all = "öfters. „word“ lowercase-Uppercase jede(r) not/exactly/a/word"
puts hide_non_capitalized(hide_all)
#=> ------. „----“ ------------------- ----(-) ---/-------/-/----