我有这个字符串:
151228-▶Guido's Lounge Cafe Broadcast 0124 Guido'sLoungeCafé将会好起来(20140718)
我想删除字符串中的数字 - “0124”和“20140718”,但在正则表达式中保留数字“151228”不受正则表达式的影响。我尝试了很多次,但仍然找不到使用一个表达式的方法。我能做的最好的就是:
151228-▶Guido的休息室咖啡厅广播它将是好的)由Guido的休息室咖啡厅
表达式:[^ \ d +] \ d +
这几乎是成功的,但“20140718”的左括号也被删除了。
我不是很擅长正则表达式,而且这个字符串只是对我自己的测试。我想知道是否有一个表达式可以处理它,或者我是否必须做多个。任何人都可以为我推荐一些关于正则表达式的文章吗?我读了一些,但很多都不是很详细。
我使用php,并通过preg_replace(regex,“”,“$ str”)替换工作。这里显示的字符串是随机选择的。所以不会有一些特殊的限制。实际上,我只想删除字符串中的数字来测试我的正则表达式理解。然后我失败了......
答案 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é