0

基本上我正在尝试使用一些正则表达式来执行以下操作...我有一些需要拆分的数据,示例数据如下所示:

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

我希望能够选择品牌名称或产品名称,但如果不抓住正则表达式中的“-”部分,我似乎无法做到这一点。有人告诉我我错过了什么吗?我的正则表达式非常基本。

编辑:我正在将数据库导出到电子表格,对其进行格式化并通过 CSV 将其导入新系统。旧系统使用如上所述的品牌名称 - 产品名称方法,而新系统使用两个单独的字段。理想情况下,我想尝试在电子表格公式中偷偷摸摸一些正则表达式,但现在我认为用脚本处理它会更容易。可能是 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

如果您知道数据格式正确,特别是字符串-(一个空格、一个连字符、一个空格)只会出现在中间作为分隔符,您可以使用(.*) - (.*)第一个检索品牌名称组和第二个中的产品名称。

于 2010-01-27T11:53:32.953 回答