我有一组食谱中的项目数据,它们都遵循类似的格式。
2 ripe avocados, halved, stoned, peeled, coarsely chopped
125g tin chickpeas, rinsed, drained
250g cherry tomatoes, chopped
2 fresh red birdseye chillies, seeded, finely chopped
1/2 cup coriander leaves
1 tablespoon lime juice
2 tablespoons plain flour
2 teaspoons sumac
8 (about 800g) white fish fillets (such as bream or whiting)
1 tablespoon vegetable oil
我想要做的是在第一个逗号(,)后忽略所有内容,因为它与我正在寻找的无关。那么数据集将如下所示:
2 ripe avocados
125g tin chickpeas
250g cherry tomatoes
2 fresh red birdseye chillies
1/2 cup coriander leaves
1 tablespoon lime juice
2 tablespoons plain flour
2 teaspoons sumac
8 (about 800g) white fish fillets (such as bream or whiting)
1 tablespoon vegetable oil
现在删除括号内的任何内容,生成以下数据集:
2 ripe avocados
125g tin chickpeas
250g cherry tomatoes
2 fresh red birdseye chillies
1/2 cup coriander leaves
1 tablespoon lime juice
2 tablespoons plain flour
2 teaspoons sumac
8 white fish fillets
1 tablespoon vegetable oil
最后,我想删除一些设定的单词,没有一大堆单词,我有一个列表,但在这个例子中,它将是'tin','fresh'和'ripe'这两个词。导致我正在寻找的两件事,即搜索词和音量。如下:
2 avocados
125g chickpeas
250g cherry tomatoes
2 red birdseye chillies
1/2 cup coriander leaves
1 tablespoon lime juice
2 tablespoons plain flour
2 teaspoons sumac
8 white fish fillets
1 tablespoon vegetable oil
这很可能是正则表达式,目前我正在使用爆炸和其他迭代等尝试实现这一点,因为正则表达式不是我最强的观点,但它不是正确的方法。
非常感谢任何帮助或建议!最终,原因是因为我有一个食品和数量的数据库,我试图比较。
答案 0 :(得分:1)
替换
,.*$|\([^)]+\)|\b(tin|fresh|ripe)\b
使用''(然后您可能需要将'{2,}'替换为''以处理例如125g tin chickpeas
转到125g chickpeas
(双倍空格)。
,.*$
匹配从逗号到行尾的所有内容,\([^)]+\)
替换括号中的匹配(无嵌套括号),tin|fresh|ripe
匹配单词'tin','fresh '和'成熟'。 \b
匹配'字边界',例如“条纹”中的“成熟”不会被删除。
在PHP中,您可以使用类似preg_replace
的内容,例如
$recipe = preg_replace('/,.*$|\([^)]+\)|\b(tin|fresh|ripe)\b/', '', $recipe)
// fix multiple-spaces
$recipe = preg_replace('/ {2,}/', ' ', $recipe)