1

次のテキストがあるとします。

BBC - テキストはこちら

文字列が で始まるかどうかを正規表現を使用してテストするにはどうすればよい"* - "ですか?

次に、 を削除して"* - "、 だけを残し"Here is the text"ます。(私はpythonを使用しています)。

私が使用するの"*"は、明らかに"BBC - "毎回始まるとは限らないためです。他の部分文字列である可能性があります。

これは機能しますか?

"^.* - "

どうもありがとうございました。

答え:

m = re.search(ur'^(.*? [-\xe2\u2014] )?(.*)', text)

これはうまくいきました。ありがとう@xanatos!

4

4 に答える 4

2

「最初のハイフンの前のすべてとそのハイフン自体に一致する」パターンは次のとおりです。

/^[^-]*-\s*/

次のように書かれています。

^      - starting from the beginning of the string...
[^-]*  - match any number (including zero) of non-hyphens, then...
-      - match hyphen itself, then...
\s*    - match any number (including zero) of whitespace

次に、パターンに一致する文字列を空の文字列に置き換えるだけです。置換の結果は、おそらく全体的に必要なものです。)

于 2013-08-04T07:40:10.273 に答える
0

?- 演算子を使用します。

'^(.+ [-] )?(.+)$'

空白に対してもう少し柔軟に実装したいかもしれません...

些細で大雑把なテスト スクリプト (Python の代わりに php を使用しています。申し訳ありません!):

<?php
$string  = "BBC - This is the text.";
$pattern = '/^(.+ [-] )?(.+)$/';
preg_match($pattern, $string, $tokens);
var_dump($tokens);
?>

テストスクリプトの出力:

array(3) {
  [0] =>
  string(23) "BBC - This is the text."
  [1] =>
  string(6) "BBC - "
  [2] =>
  string(17) "This is the text."
}

最初の括弧は、長さ > 0 の任意の文字で始まり、その後に空白文字、リテラル ハイフン、および別の空白文字が続く、文字列の先頭にある任意のテキストに一致します。このシーケンスは、存在する場合と存在しない場合があります。2 番目の括弧は、文字列の残りすべてに最後まで一致します。

于 2013-08-04T07:33:06.423 に答える
0

/^.+-/動作するはずです。

以下は、要件に応じたテスト ケースです。

パス:foo -

パス:bar-

パス:-baz-

パス:*qux-

パス:-------------

失敗:****

失敗:-foobar

于 2013-08-04T07:45:39.613 に答える