文で完全停止(ピリオド)をどのように一致させることができますが、浮動小数点数または数字を含む単語と一致させたくありませんか?perlを使用して文中で完全一致を一致
例えば、
$sen = "I'm going to match full.stop in sentence 3.142";
if ($sen =~ (s/\.//)) {
print $1;
}
出力:この例では
fullstop
私は言葉だけまたは英数字の言葉ではない数字と一致します。
文で完全停止(ピリオド)をどのように一致させることができますが、浮動小数点数または数字を含む単語と一致させたくありませんか?perlを使用して文中で完全一致を一致
例えば、
$sen = "I'm going to match full.stop in sentence 3.142";
if ($sen =~ (s/\.//)) {
print $1;
}
出力:この例では
fullstop
私は言葉だけまたは英数字の言葉ではない数字と一致します。
使用して見て回る:
$sen =~ s/(?<!\d)\.(?!\d)//g;
をこれは数字に続く数字はないが先行していない点に一致します。
OPさんのコメントによると、これは大文字が続いているドットを削除しますを更新:
#!/usr/bin/perl
use Modern::Perl;
use utf8;
while(<DATA>) {
chomp;
s/\.(?=(?:\s*[A-Z])|$)//g;
# Or, if you want to be unicode compatible
s/\pP(?=(?:\s*\p{Lu})|$)//g;
say;
}
__DATA__
I'm going to match full.stop in sentence 3.142
I'm going to match full.Stop in sentence 3.142
I'm going to match full. Stop in sentence 3.142
I'm going to match full.stop in sentence 3.142. End of string.
出力:
I'm going to match full.stop in sentence 3.142
I'm going to match fullStop in sentence 3.142
I'm going to match full Stop in sentence 3.142
I'm going to match full.stop in sentence 3.142 End of string
/(\.(\D|$))|\D\./
を使用できます。 \D
は、非数字文字を意味し、あなたが最初の期間(「full.stop」の真ん中に1)を削除したい場合は$
はライン
の終わりを意味するが、第二1(3.142中1)のままに無傷で、また「1」のような数字にしておきます。または「p.1223」あなたは、次の操作を行うことができます。
$sen =~ s/(\D)\.(\D)/$1$2/g;
print $sen;
Oof。もちろんあなたは正しい。他のケースをテストした後、ブラケットを外すのを忘れてしまった。答えを編集しました。ありがとう! –
それはあなたのような単純なREG-EXEファイルを保つためにうれしいです彼らはすでに読むのが難しいからです。
$sen = "I'm going to match full.stop in sentence 3.142";
print "$1\n" if $sen =~ /([^\d\s]+\.[^\d\s]+)/';
が与える:
full.stop
一つ以上のない桁アンド空白次いで'.'
、再度一つ以上のない桁アンドない空白を照合します
出力を追加すると、明確かつ完全な答えになります。あなた自身が言うように、正規表現は読むのが簡単ではないので、正規表現はそれほど役に立たないだけであれば、あまり役に立ちません – Vince
最初のピリオド(「full.stop」の途中のもの)を削除し、2番目のピリオド(3.142のもの)をそのまま残したいとしますか? –