我有一个(可能非常基础的)问题,关于如何构建一个(perl)正则表达式:
例如,我想消除特定字符串中的任何非字母数字字符(在更大的文本语料库中)。仅举例说明,该字符串以[开头,后跟@,可能在两者之间有一些字符。
以下是正则表达式:
perl -pe 's///g;'
,它可以在指定的字符串中查找/替换给定字符/字符集的多个实例。最初,我认为g“全局”标志会做到这一点,但显然我对某些非常核心的东西有误解。:/例如,我想消除特定字符串中的任何非字母数字字符(在更大的文本语料库中)。仅举例说明,该字符串以[开头,后跟@,可能在两者之间有一些字符。
[abc@def"ghi"jkl'123]
以下是正则表达式:
s/(\[[^\[\]]*?@[^\[\]]*?)[^a-zA-Z0-9]+?([^\[\]]*?)/$1$2/g;
如果我运行三次,将找到第一个 ",这样我就有了所有的三个。 同样地,如果我想用其他字符替换非字母数字字符,比如说 X。
s/(\[[^\[\]]*?@[^\[\]]*?)[^a-zA-Z0-9]+?([^\[\]]*?)/$1X$2/g;
对于一个实例,这个方法可以解决问题。但是如何一次性找出所有实例呢?
[abc@def"ghi"jkl'123]
中得到什么输出? - Nick