基本上我正在尝试使用一些正则表达式来执行以下操作...我需要拆分一些数据,示例数据如下所示:
Brand Name - Product Name
Another Brand - Shoe Laces
Heinz - Bakes Beans
我希望能够选择品牌名称或产品名称,但如果没有在正则表达式中捕获“ - ”部分,我似乎无法做到。谁有人告诉我我错过了什么?我的正则表达式非常基础。
编辑:我正在将数据库导出到电子表格,格式化并通过CSV将其导入新系统。旧系统使用了品牌名称 - 上面的产品名称方法,而新的系统使用两个单独的字段。理想情况下,我想尝试在电子表格公式中隐藏一些正则表达式,但现在我认为用脚本来处理它会更容易。可能是PHP虽然不排除Javascript。
答案 0 :(得分: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";
}
?>
Ruby版本:
#!/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
}
答案 1 :(得分: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);
答案 2 :(得分:1)
假设字符串中不会有任何杂散连字符(-
)(并且品牌名称等仅包含字母数字字符和空格 - 要允许其他符号,请将它们添加到字符类{ {1}}),您可以使用以下正则表达式:
[]
结果对象如下所示:
^([\w\s]+?)\s*-\s*([\w\s]+)$
品牌名称
$1
产品名称
答案 3 :(得分:0)
此任务不需要正则表达式。只需找到子串“-
”的索引即可。在它是乐队名称之前的东西,以及之后是产品名称。
答案 4 :(得分:0)
如果您知道要格式良好的数据,特别是字符串-
- 一个空格,一个连字符,一个空格 - 只会作为中间的分隔符出现,您可以使用(.*) - (.*)
检索第一组中的品牌名称和第二组中的产品名称。