在正则表达式匹配后插入\ n后的单词

时间:2016-07-27 22:13:28

标签: regex r

假设我有一长串文字,如段落或更多,并且有一个特定的词经常出现,我们称之为KEY。

我想在每个KEY之后的单词之后插入一个“\ n”。

所以如果我有字符串\0。我希望它看起来像strptr++

如果任务稍微简单一点,我只想在KEY之后添加\ n,那么我可以轻松地使用app = Flask(__name__) app.config.from_object('config') CsrfProtect(app) db = SQLAlchemy(app) ,但我不认为正则表达式有一种优雅的方式来选择匹配,即使它确实如此,我也不确定我是否可以在import os basedir = os.path.abspath(os.path.dirname(__file__)) DEBUG = True WTF_CSRF_ENABLED = True SECRET_KEY = 'supersecretkey' SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'project.db') SQLALCHEMY_TRACK_MODIFICATIONS = False 中使用它。

在我想要的地方添加\ n的好方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用捕获组并返回参考。正如WiktorStribiżew所指出的那样,您必须决定如何处理某些场景和案例的具体情况。

对于显示的示例案例,查找KEY后跟一个空格,后跟非whitepspace字符1次或更多次(\\S+),后跟空格:

gsub("(KEY \\S+ )", "\\1\n", string, perl = TRUE)

如果你想在“KEY”之后更加通用,那么你可以添加一个字符类,包括你允许的内容(或者对于任何空格字符都是\或对于任何非字母数字/下划线字符都是\ W ,正如Wiktor所指出的那样)。像这样:

gsub("(KEY[., ;!?]\\S+ )", "\\1\n", string, perl = TRUE)
gsub("(KEY\\s\\S+ )", "\\1\n", string, perl = TRUE)
gsub("(KEY\\W+\\S+ )", "\\1\n", string, perl = TRUE)

在字符类部分[., ;!?]

中添加所需的标点符号

Wiktor的变体可能更强大一些:

gsub("(KEY\\s+\\S+\\s*)", "\\1\n", string)  # \s = white-space character
                                            # \S = non-white-space character
gsub("(KEY\\W+\\w+\\s*)", "\\1\n", string) # \w for alphanumeric/underscore
                                           # \W for the opposite of \w.

这些变体在下一个单词后面不需要空格(\\s*表示0个或更多空格字符)并且它们可以匹配KEY之后的一个或多个空白字符或一个或多个非字母数字/下划线在KEY之后。