使用正则表达式

时间:2015-12-28 05:46:59

标签: regex

我有这个字符串:

151228-▶Guido's Lounge Cafe Broadcast 0124 Guido'sLoungeCafé将会好起来(20140718)

我想删除字符串中的数字 - “0124”和“20140718”,但在正则表达式中保留数字“151228”不受正则表达式的影响。我尝试了很多次,但仍然找不到使用一个表达式的方法。我能做的最好的就是:

151228-▶Guido的休息室咖啡厅广播它将是好的)由Guido的休息室咖啡厅

表达式:[^ \ d +] \ d +

这几乎是成功的,但“20140718”的左括号也被删除了。

我不是很擅长正则表达式,而且这个字符串只是对我自己的测试。我想知道是否有一个表达式可以处理它,或者我是否必须做多个。任何人都可以为我推荐一些关于正则表达式的文章吗?我读了一些,但很多都不是很详细。

我使用php,并通过preg_replace(regex,“”,“$ str”)替换工作。这里显示的字符串是随机选择的。所以不会有一些特殊的限制。实际上,我只想删除字符串中的数字来测试我的正则表达式理解。然后我失败了......

3 个答案:

答案 0 :(得分:1)

如果它总是有广播和好的话,你可以指定它:

toDelete = re.findall('Broadcast ([0-9]+)', line)
toDelete2 = re.findall('Alright ([(0-9)]+)', line)

应该将这些数字拉出来,然后使用特定数据,您可以创建一个函数来删除行中toDelete中的内容。 ('line'我的意思是你要从中删除字符串的行是) 我会写,但不知道你正在使用什么语言。

答案 1 :(得分:0)

似乎您总是希望保留第一个数字(" - ▶"的左侧),以及要删除的所有其他数字。假设使用Python语言,您应该能够使用负面预测,如下所示:

print re.sub(r'\d+(?!.*-▶)', '', "151228-▶ Guido's Lounge Cafe Broadcast 0124 It Will Be Alright (20140718) by Guido's Lounge Café")

# output
# 151228-▶ Guido's Lounge Cafe Broadcast  It Will Be Alright () by Guido's Lounge Café

工作原理:除了第一组外,它用空字符串替换任何一组数字。第一组定义为-▶字符序列的左侧。

编辑(在PHP中):

$output = preg_replace("/\d+(?!.*-)/", "", "151228- Guido's Lounge Cafe Broadcast 0124 It Will Be Alright (20140718) by Guido's Lounge Caf");

返回:

151228- Guido's Lounge Cafe Broadcast  It Will Be Alright () by Guido's Lounge Caf

答案 2 :(得分:0)

使用多个正则表达式确实更好,但这里只有一个:

s/(\d+)([^0-9]+)\s+\d+([^(]+)[(]\d+[)]\s+(.+)$/$1$2$3$4/;

输出是:

151228-▶ Guido's Lounge Cafe Broadcast It Will Be Alright by Guido's Lounge Café