0

基本的に、次のことを行うために正規表現を少し取得しようとしています...分割する必要があるデータがいくつかあります。サンプルデータは次のようになります。

Brand Name - Product Name
Another Brand - Shoe Laces
Heinz - Bakes Beans

ブランド名または製品名を選択できるようにしたいのですが、正規表現の「 - 」部分をキャッチしないとできないようです。私が見逃しているものを誰か教えてください。私の正規表現はかなり基本的です。

編集:データベースをスプレッドシートにエクスポートし、フォーマットして、CSV を介して新しいシステムにインポートしています。古いシステムでは、上記のようにブランド名と製品名の方法が使用されていましたが、新しいシステムでは 2 つの別個のフィールドが使用されます。理想的には、スプレッドシートの数式に正規表現を忍び込ませたいと思っていましたが、スクリプトでこれを処理する方が簡単になると思います。おそらく PHP ですが、Javascript も除外されていません。

4

5 に答える 5

1

そのための正規表現は必要ありません-単純なsplitもので十分です。

Python での例:

#!/usr/bin/env python
from string import strip

s = """
Brand Name - Product Name
Another Brand - Shoe Laces 
Heinz - Bakes Beans
"""

for line in s.split('\n'):
    try:
        brand, product = map(strip, line.split('-'))
        print 'Brand:', brand, '| Product:', product
    except:
        pass

収量:

Brand: Brand Name | Product: Product Name
Brand: Another Brand | Product: Shoe Laces
Brand: Heinz | Product: Bakes Beans

PHP のバージョン:

<?php

$s = <<<EOM
Brand Name - Product Name
Another Brand - Shoe Laces 
Heinz - Bakes Beans
EOM;

foreach (split("\n", $s) as $line) {
    list($brand, $product) = split("-", $line, 2);
    echo "Brand: " . trim($brand) . " | Product: " . trim($product) . "\n";
}

?>

ルビーのバージョン:

#!/usr/bin/env ruby

s = "
Brand Name - Product Name
Another Brand - Shoe Laces 
Heinz - Bakes Beans
"

s.split("\n").each { |line| 
  brand, product = line.split("-").map{ |item| item.strip }
  puts "Brand: #{brand} | Product: #{product}" if brand and product
}
于 2010-01-27T11:52:49.337 に答える
1

データがそのように構造化されている場合、最も簡単な方法は、言語の分割方法を使用してから、「-」で分割することです。例えばPythonで

"Heinz - Bakes Beans".split("-")

複雑な正規表現は不要

したがって、データがファイルにある場合

for line in open("file"):
    brand,product=line.rstrip().split("-")
    print brand, product

PHP を使用している場合は、explode を使用できます。

$f = fopen("file","r");
if($f){
     while( !feof($f) ){
        $line = fgets($f,4096);
        list($brand,$product) = explode("-",$line);
        echo "$brand - $product\n";
     }
}
fclose($f);
于 2010-01-27T11:54:07.957 に答える
1

文字列にハイフン ( -) が含まれていないと仮定すると (そして、ブランド名などには英数字とスペースのみが含まれます - 他の記号を許可するには、それらを文字クラスに追加します[])、次の正規表現を使用できます。

^([\w\s]+?)\s*-\s*([\w\s]+)$

結果オブジェクトは次のようになります。

$1ブランド名
$2商品名

于 2010-01-27T11:56:15.237 に答える
0

このタスクには正規表現は必要ありません。部分文字列 " " のインデックスを見つけるだけ-です。前がバンド名、後ろが商品名です。

于 2010-01-27T11:51:57.180 に答える
0

データが適切にフォーマットされていることがわかっていて、特に文字列-(スペース 1 つ、ハイフン 1 つ、スペース 1 つ) が真ん中の区切り文字としてのみ出現することがわかっている場合(.*) - (.*)は、最初の文字列のブランド名を取得するために使用できます。 2 番目のグループと製品名。

于 2010-01-27T11:53:32.953 に答える