假设我有这三行:
the quick brown fox
the brown fox
the quick brown quick fox
除了单词quick
之外,可以使用正则表达式裁掉每一行中的所有内容吗?
最终结果如下:
quick
quickquick
答案 0 :(得分:4)
具体细节取决于您使用的语言,但这里有一些使用正则表达式(Python中的代码示例)的常用方法:
查找目标字符串的所有匹配项,然后将每个匹配项合并为一个字符串:
>>> import re
>>> s = 'the quick brown quick fox'
>>> ''.join(re.findall('quick', s))
'quickquick'
构造一个正则表达式以匹配除目标字符串之外的所有内容,然后用空字符串替换每个匹配项(这通常比列出的其他替代方案困难得多)< / EM>:
>>> re.sub('(?!quick|(?<=q)uick|(?<=qu)ick|(?<=qui)ck|(?<=quic)k).', '', s)
'quickquick'
使用捕获组匹配所有内容,直到出现目标字符串,然后仅替换目标字符串:
>>> re.sub('.*?(quick|$)', r'\1', s)
'quickquick'
如果您的字符串在示例中有多行,您可以先在换行符上拆分字符串,或调整解决方案以保持换行符,例如:
>>> s = '''the quick brown fox
... the brown fox
... the quick brown quick fox'''
>>> print ''.join(re.findall('quick|[\r\n]', s))
quick
quickquick
>>> print re.sub('.*?(quick|$)', r'\1', s, flags=re.MULTILINE)
quick
quickquick
答案 1 :(得分:1)
单独的Regex不用于操纵字符串。它只进行模式匹配。根据您用来实现它的工具,您通常可以使用正则表达式匹配进行字符串替换。例如,从Bash终端,您可以使用Sed,或者从PHP中使用preg_replace()。
答案 2 :(得分:0)
是的,通过实施lookahead
和lookbehind
constructions,正则表达式能够进行搜索。
例如,这是使用正向前瞻性表达式的Python程序,它可以满足您的需要:
import re
s = '''the quick brown fox
the brown fox
the quick brown quick fox'''
rx = re.compile('(?!quick).*')
print rx.findall(s)
输出:
['the quick brown fox', '', 'the brown fox', '', 'the quick brown quick fox', '']
答案 3 :(得分:0)
使用 sed :
sed -r 's/(quick|)./\1/g' file.txt