1

特定の文字で文を切り捨てるにはどうすればよいですか。

$sentence = 'スタック オーバーフロー - ここで質問してください';

以下のみがエコーされるように:

スタックオーバーフロー

文字数はまちまちですが、終着点は必ず「スペースダッシュスペース」

4

3 に答える 3

2

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 つの方法を考えると、必要以上に手間がかかります。

于 2009-01-03T23:11:24.253 に答える
0

$variable言語について言及されていませんが、名前から Perl だと思います。Perl でこれを行う最も簡単な方法の 1 つは、単純な正規表現を使用することです。

$sentence = 'Stack Overflow - Ask Questions Here';

if ($sentence =~ /^(.*?) - /) {
  print "Found match: '$1'\n";
}

これは、最初のスペース-ダッシュ-スペース シーケンスまで、貪欲でない方法で文字列の最初の部分に一致します。式の最初の部分を囲む括弧は、一致する部分を「キャプチャ」する必要があることを示します。Perl では、変数 $1 に格納されます (他のキャプチャされたパターンは $2、$3 などに格納されます)。一致が見つかった場合、一致する部分が $1 に格納されてから出力されます。

于 2009-01-03T22:45:46.520 に答える
0

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";

これらは、最初または最後の "-" まで、または "-" がない場合は文字列全体に一致します。

于 2009-01-03T23:13:27.507 に答える