我有一根绳子:
151228-▶Guido's酒廊咖啡厅广播0124它将是好的(20140718)由吉多的酒廊咖啡厅
我想删除字符串中的数字-- "0124“和"20140718”,但在开始处的数字"151228“不受正则表达式的影响。我试过很多次了,但还是找不到一种只用一个表达式就能做到的方法。我所能做的就是:
151228--▶Guido's酒廊咖啡厅将在Guido's酒廊咖啡厅播放它将是好的)
由表达式:^\d+\d+
这几乎是一个成功,但"20140718“的括号也被删除了。
我不太擅长regex,而这条线只是对我自己的一个测试。我想知道是否有一个单一的表达式可以处理它,或者我是否必须做多次。有人能为我推荐一些关于regex的文章吗?我读过一些,但很多不是很详细。
我使用php,并通过preg_replace(regex、"“、"$str")进行一些替换工作。这里显示的字符串是随机选择的。所以不会有什么特殊的限制。实际上,我只是想删除字符串中的数字来测试我的正则表达式。然后我失败了..。
发布于 2015-12-28 06:20:15
似乎您总是希望保留第一个数字(“-▶”的左边),并删除所有其他数字。假设使用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发布于 2015-12-28 05:57:39
如果它总是有“广播”和“好”一词,那么您只需指定它:
toDelete = re.findall('Broadcast ([0-9]+)', line)
toDelete2 = re.findall('Alright ([(0-9)]+)', line)这应该会提取出这些数字,然后您可以使用特定的数据创建一个函数,从行中删除toDelete中的任何内容。(所谓“行”,我指的是你想要删除的字符串所在的行),我会写它,但不知道你使用的是哪种语言。
发布于 2015-12-28 06:35:08
对于多个regexes来说,这样做确实更好,但是这里有一个:
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éhttps://stackoverflow.com/questions/34488276
复制相似问题