我正在寻找一个正则表达式,它将匹配5个字符串,如标题中显示的两个字符串。这是一个示例输入字符串。
This is a sentence that doesn't contain any matches of the regex.
This is a sentence that has two matches of the string at the end of the sentence [411] [101].
This is a sentence that has three matches [876] [232] [323].
我希望在perl或sed中看到一个解决方案,从文本文件中删除这些字符串,以及从短字符串中删除此字符串的解决方案。我是正则表达式,perl和sed的新手。我尝试使用反向正则表达式工具,似乎给了我这个正则表达式,但我找不到一种方法将它用于perl或sed。
\\[\\d\\d\\d\\]
然后我用perl尝试了类似的东西并且没有进一步。
perl -p -i -e 's/\\[\\d\\d\\d\\]/""/g' textFileToRemoveRegexMatches.txt
答案 0 :(得分:0)
尝试下一个:
my $str = 'word [123] word [456]';
my $regex = qr/\[\d{3}\]/p;
my $subst = '';
my $result = $str =~ s/$regex/$subst/rg;
但也许您想使用命令sed
。例如
sed 's/\[\d{3}\]//g' filename.txt
答案 1 :(得分:0)
Perl中的解决方案:
$ echo 'one[876] two[232] three[323]' | perl -pe 's/\[\d{3}\]//g;'
打印:
one two three
Sed中的解决方案:
$ echo 'one[876] two[232] three[323]' | sed 's/\[[[:digit:]]\{3\}\]//g;'
打印:
one two three
这些示例使用了实时命令行界面,但是您也可以将代码放入脚本文件中以供重用,如下所示:
Perl脚本:
#! /usr/bin/perl -p
# purge-bracket-numbers.perl
s/\[\d{3}\]//g
Sed脚本:
#! /usr/bin/sed -f
# purge-bracket-numbers.sed
s/\[[[:digit:]]\{3\}\]//g
答案 2 :(得分:-1)
这个怎么样:
>>> s = "Hello world [123] this is some text"
>>> e = r'\[\d{3}\]'
>>> import re
>>> re.sub(e, '', s)
'Hello world this is some text'
如果您想大规模地执行此操作,请考虑使用 sed 这是 s tream ed itor。除了作为macOS上的核心实用程序外,它还适用于所有Linux版本。
我用这两行创建了一个示例文件:
This is line one with [123] and needs to be substituted.
This is a longer line, lets call it line 2 that has [this thing] that should not be replaced, but [345] that should.
使用sed的方法是将替换表达式传递给它。命令s
表示替换,g
表示替换所有匹配项,而不仅仅是第一个匹配项。
接下来,您将表达式想要搜索,并在字符之间进行替换。常见的规范是使用/
,但您可以使用任何两个在shell中没有特殊含义的相似字符。
所以,sed命令是:
sed s/search-for-this/replace-with-this/g the-name-of-the-file.txt
如果输入上述内容,sed将只返回它所替代的内容。以下是我们的正则表达式的示例:
$ sed 's/\[[0-9]\{3\}\]//g' test.txt
This is line one with and needs to be substituted.
This is a longer line, lets call it line 2 that has [this thing] that should not be replaced, but that should.
sed的默认行为是返回结果;并且它不会修改原始文件(因为它设计用于流)。
要获取sed更改原始文件,请传递-i
参数,这意味着就地 - 也就是说,在文件本身中进行替换,如下所示:
$ sed -i 's/\[[0-9]\{3\}\]//g' test.txt
请注意,这一次,它没有返回任何内容,但是,如果我们检查文件已被修改:
$ cat test.txt
This is line one with and needs to be substituted.
This is a longer line, lets call it line 2 that has [this thing] that should not be replaced, but that should.
注意:如果您使用的是Mac,则可能需要使用sed -i '.bak'