特定の文字で文を切り捨てるにはどうすればよいですか。
$sentence = 'スタック オーバーフロー - ここで質問してください';
以下のみがエコーされるように:
スタックオーバーフロー
文字数はまちまちですが、終着点は必ず「スペースダッシュスペース」
特定の文字で文を切り捨てるにはどうすればよいですか。
$sentence = 'スタック オーバーフロー - ここで質問してください';
以下のみがエコーされるように:
スタックオーバーフロー
文字数はまちまちですが、終着点は必ず「スペースダッシュスペース」
Python を使用している場合、非正規表現のアプローチは次のようになります。
>>> s = 'Stack Overflow - Ask Questions Here'
>>> s.split(' - ')
['Stack Overflow', 'Ask Questions Here']
>>> # To get the substring before the match
>>> s.split(' - ')[0]
'Stack Overflow'
正規表現のアプローチは次のようになります。
>>> import re
>>> re.split(' - ', s)[0]
'Stack Overflow'
もちろん、文字列全体を予想されるトークンと一致させる正規表現を作成し、最初の部分をグループ化することもできますが、これら 2 つの方法を考えると、必要以上に手間がかかります。
$variable
言語について言及されていませんが、名前から Perl だと思います。Perl でこれを行う最も簡単な方法の 1 つは、単純な正規表現を使用することです。
$sentence = 'Stack Overflow - Ask Questions Here';
if ($sentence =~ /^(.*?) - /) {
print "Found match: '$1'\n";
}
これは、最初のスペース-ダッシュ-スペース シーケンスまで、貪欲でない方法で文字列の最初の部分に一致します。式の最初の部分を囲む括弧は、一致する部分を「キャプチャ」する必要があることを示します。Perl では、変数 $1 に格納されます (他のキャプチャされたパターンは $2、$3 などに格納されます)。一致が見つかった場合、一致する部分が $1 に格納されてから出力されます。
Perlを想定して、これを試してください:
$sentence1 = 'Stack Overflow - Ask Questions Here - And more here';
$sentence2 = 'Just Stack Overflow';
$sentence1 =~ /^(.*?)( - |$)/;
print $1, "\n";
$sentence1 =~ /^(?|(.*) - |(.*)$)/;
print $1, "\n";
$sentence2 =~ /^(.*?)( - |$)/;
print $1, "\n";
$sentence2 =~ /^(?|(.*) - |(.*)$)/;
print $1, "\n";
これらは、最初または最後の "-" まで、または "-" がない場合は文字列全体に一致します。