正则表达式:删除行情之间的空格,并在冒号之前停止(使用Yahoo Pipes)

时间:2014-08-27 19:22:35

标签: regex yahoo-pipes

我已经在这方面工作了一段时间,但这超出了我对正则表达式的理解。

我在RSS上使用Yahoo Pipes,我想从标题创建主题标签;所以,我想从引号之间的所有内容中删除空格,但是,如果引号中有冒号,我只想在冒号前的单词之间删除空格。

而且,如果我还可以将不间隔的单词作为一个组捕获,那将是很好的,以便能够使用:#$ 1一步输出#标签。

所以,比如:

"The New Apple: Worlds Within Worlds" Before We Begin...

可以替换为#$ 1 - 使用此结果:

"#TheNewApple: Worlds Within Worlds" Before We Begin...

经过一番工作,我能够想出这个正则表达式:

\s(?=\s)?|(‘|’|(Review)|:.*)

("评论"这个词经常出现在冒号之前,如果它在标题的后面,则不会被剥夺;那是什么' s for,但我想不要求,更加普遍)

但是,它有两个问题:

  • 我必须使用多个步骤。正则表达式的结果将是:

    "TheNewApple: Worlds Within Worlds" Before We Begin...
    

然后我可以添加另一个正则表达式步骤,将哈希#放在前面

  • 但是,它只有在报价是第一位的情况下才有效,我不知道如何解决这个问题......

4 个答案:

答案 0 :(得分:1)

您可以将文字与

匹配
"([^:]*)(.*?)"(.*)

然后使用一些编程语言输出如下结果:

'"#' + removeSpace($1) + $2 + '"' + $3

答案 1 :(得分:1)

我不知道你正在使用什么语言,但这对于正则表达式来说似乎是一个糟糕的选择。在Python中我会这样做:

# Python 3
import re

titles = ['''"The New Apple: Worlds Within Worlds" Before We Begin...''',
           '''"Made Up Title: For Example Only" So We Can Continue...''']

hashtagged_titles = list()
for title in titles:
    hashtagme, *restofstring = title.split(":")
    hashtag = '"#'+hashtagme[1:].translate(str.maketrans('', '', " "))
    result = "{}:{}".format(hashtag, restofstring)
    hashtagged_titles.append(result)

答案 2 :(得分:1)

进行全球搜索

\ (?=.*:)

什么都没有替换。 Example

如果你想要捕捉" TheNewApple"你需要再次搜索结果。作为一个单词。

答案 3 :(得分:1)

您可以使用正则表达式一步一步完成此操作,但需要注意。您遇到重复捕获组的问题,因为只有最后一次迭代在替换字符串中可用。搜索( (\w+))+并替换为$2会将所有替换为最后一场匹配 - 而不是我们想要的。

解决这个问题的方法是重复模式任意次数,以满足您的使用需求。可以引用每个单独的组。

搜索:"(\w+)(?: (\w+))?(?: (\w+))?(?: (\w+))?(?: (\w+))?(?: (\w+))?

替换:"#$1$2$3$4$5$6

这将取代最多6个字的标题,完全按照您的需要。首先,"(\w+)匹配引用后的任何单词。在替换字符串中,将其添加为"#$1,添加主题标签。其余的是(?: (\w+))?个匹配的重复列表,每个匹配可能的空格和单词。请注意,该空间是非捕获组的一部分;只有这个词是内部捕获组的一部分。在替换字符串中,我有$1$2$3$4$5$6,它放回单词,没有空格。请注意,冒号不会匹配任何部分,因此一旦它到达冒号就会停止。

示例:

"The New Apple: Worlds Within Worlds" Before We Begin...
"The New Apple" Before We Begin...
"One: Two"
only "One" word
this has "Two Words"
"The Great Big Apple Dumpling"
"The Great Big Apple Dumpling Again: Part 2"

结果:

"#TheNewApple: Worlds Within Worlds" Before We Begin...
"#TheNewApple" Before We Begin...
"#One: Two"
only "#One" word
this has "#TwoWords"
"#TheGreatBigAppleDumpling"
"#TheGreatBigAppleDumplingAgain: Part 2"