Regex karakterinden sonra önce seçme

5 Cevap php

Temelde ben bölmek için gereken bazı veriler var ... aşağıdakileri yapmak için regex biraz olsun çalışıyorum, örnek veri bu gibi görünüyor:

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

Ben marka adını veya ürün adını seçin edebilmek istiyorum ama ben alıcı olmadan bunu yapmak için görünmüyor olabilir - regex kısmını "". Herkes ben özlüyorum ne söyle? Benim regex oldukça basit.

EDIT: Ben onu biçimlendirme ve bir CSV ile yeni bir sistemin içine ithal, bir elektronik bir veritabanı ihraç ediyorum. Yeni bir iki ayrı alanlar olarak kullanır nerede yukarıdaki gibi ürün ismi yöntemi - eski sistem bir marka kullanılmıştır. İdeal elektronik tablo formül bazı regex denemek ve gizlice istedim ama şimdi ben onun sadece bir komut ile bu işlemek için daha kolay olacak sanırım. Olasılıkla PHP Javascript dışladı olmamasına rağmen.

5 Cevap

Bunun için bir regex ihtiyacınız olmayacak - basit bir split yeterli olacaktır.

Python Örnek:

#!/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

Verim:

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

PHP version:

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

?>

Ruby versiyon:

#!/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
}

Herhangi bir sokak tire (-) dize (ve orada olmayacak varsayarsak marka adları vs sadece alfanümerik karakterler ve boşluk içerecektir -, diğer semboller izin karakter sınıfları {[ekleyebilirsiniz (1)]}), size aşağıdaki regex kullanabilirsiniz:

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

Sonuç nesnesi gibi görünecektir:

$1 Brand Name
$2 Product Name

"-" veri olduğu gibi yapılandırılmış olup olmadığını, basit yolu üzerinde bölünmüş yapmak, sonra dil ne varsa bölünmüş yöntemi kullanmaktır. Python örneğin

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

Gerek karmaşık regex

Yani veri dosyası ise

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

PHP ile çalışıyorsanız, patlayabilir kullanabilirsiniz

$f = fopen("file","r");
if($f){
     while( !feof($f) ){
        $line = fgets($f,4096);
        list($brand,$product) = explode("-",$line);
        echo "$brand - $product\n";
     }
}
fclose($f);

Bu görev için regex gerekmez. Sadece "-" alt dizenin dizin bulabilirsiniz. Bu grubun adı, ve sonra ürün adıdır sayfalar önce.

Eğer veriler iyi biçimlendirilmiş olması için biliyorum, ve özellikle dize - eğer - bir boşluk, bir tire, bir boşluk - Sadece orta ayırıcı olarak ortaya çıkar, siz {kullanabilirsiniz [(1)]} ikinci birinci grupta marka ve ürün adını almak için.