請考慮以下字符串如何用大寫字母替換特定字符?
String = 「這是測試,我是新來的perl!請幫助,我可以幫助嗎?我希望如此。
在上述字符串.
或?
或!
之後的下一個字符應爲大寫。我怎樣才能做到這一點?
我正在逐行閱讀文本文件,我需要將修改後的數據寫入另一個文件。
您的幫助將不勝感激。
請考慮以下字符串如何用大寫字母替換特定字符?
String = 「這是測試,我是新來的perl!請幫助,我可以幫助嗎?我希望如此。
在上述字符串.
或?
或!
之後的下一個字符應爲大寫。我怎樣才能做到這一點?
我正在逐行閱讀文本文件,我需要將修改後的數據寫入另一個文件。
您的幫助將不勝感激。
,你可以使用正則表達式 試試這個:
my $s = "...";
$s =~ s/([\.\?!]\s*[a-z])/uc($1)/ge; # of course $1 , thanks to plusplus
的G標誌的所有匹配搜索和電子標誌執行UC轉換的字母爲大寫
說明:
以上的搜索提到與這些模式對於每個正則表達式中的第一個出現一個標點符號後跟(可選)空格和一個字母,並用uc的結果(將匹配轉換爲大寫)替換它。
例如: 「我!」 「P」 則
my $s = "this is for test. i'm new to perl! Please help. can u help? i hope so.";
$s =~ s/([\.\?!]\s*[a-z])/uc(&1)/ge;
print $s;
會發現, 「c」 和 「?我」 和替換,所以打印的結果是:
this is for test. I'm new to perl! Please help. Can u help? I hope so.
可以使用替換操作s///
:
$string =~ s/([.?!]\s*\S)/ uc($1) /ge;
這個答案可能會有一些評論,特別是考慮到OP是Perl新手。 –
@nathan OP實際上並沒有說他是Perl的新手,只是他的示例字符串中的文本。 – TLP
@TLP:他在示例文本中寫了它。 –
編輯 - 完全誤解的問題,還以爲你只是問到由於某種原因大寫i
,爲任何混淆道歉!
作爲迄今爲止的答案狀態,您可以查看正則表達式,並使用替換運算符(s///)
。沒有人提到過\b
(字邊界)字符,這對於找到單個的i
可能很有用,否則你將不得不在字符類匹配中添加標點符號([ ... ]
)。
例如
my $x = "this is for test. i'm new to perl! Please help. can u help? i hope so. ".
\"i want it to work!\". Dave, Bob, Henry viii and i are friends. foo i bar.";
$x =~ s/\bi\b/I/g; # or could use the capture() and uc($1) in eugene's answer
給出:
# this is for test. I'm new to perl! Please help. can u help? I hope so.
# "I want it to work!". Dave, Bob, Henry viii and I are friends. foo I bar.
非常感謝各位好友。我跳它會工作。 – Sirga
這裏有一個split
解決方案:
$str = "this is for test. im new to perl! Please help. can u help? i hope so.";
say join "", map ucfirst, split /([?!.]\s*)/, $str;
如果你正在做的是打印到一個新的文件,你並不需要加入字符串返回向上。例如。
while ($line = <$input>) {
print $output map ucfirst, split /([?!.]\s*)/, $line;
}
酷傢伙現在的工作 – Sirga