繁体   English   中英

如何确保正则表达式不在 [] 或 {} 中?

[英]How to make sure that regex is not in [] or {}?

我正在尝试用随机单词列表替换给定句子中的所有单词。 这是我的代码:

import re
import random

WORDS = ["Brawk" , "Buh-gok", "Bok bok", "Bawk"] # My random word list
PATTERN = r"([a-zA-Z0-9\']+)"
DELIMITER = " "

def callback(matchobj):
    return random.choice(WORDS)

def parse_sentence(sentence):
    return re.sub(PATTERN, callback, sentence)

当我运行代码时,会发生以下情况:

>>> print(parse_sentence("some text's[color=#ff8a00]smoe more text[/color]{n}"))
Bok bok Bok bok[Buh-gok=#Buh-gok]Bok bok Buh-gok Buh-gok[/Bawk]{Brawk}

我需要它是Buh-gok Bok bok[color=#ff8a00]Bok bok Bok bok Bawk[/color]{n} ,所以如果它在[]{}内,无论如何都可以忽略它?

您需要在代码中修改两件事:

PATTERN = r"(\[[^][]*]|\{[^{}]*})|[a-zA-Z0-9']+"

def callback(matchobj):
    return matchobj.group(1) or random.choice(WORDS)

请参阅Python 演示

正则表达式 - (\[[^][]*]|\{[^{}]*})|[a-zA-Z0-9']+ - 匹配并捕获组 1 中方括号之间和之间的所有子字符串花括号并仅匹配字母数字字符块,并return matchobj.group(1) or random.choice(WORDS)返回 Group 1 值(如果 Group 1 匹配),或者如果 Group 1 不匹配则返回随机单词。

图案细节

  • ( - 捕获组 #1 的开始
    • \[[^][]*] - [ ,然后是除][之外的任何零个或多个字符,然后是]字符
    • | - 或者
    • \{[^{}]*} - { ,然后是除{}之外的任何零个或多个字符,然后是}字符
  • ) - 组结束
  • | - 或者
  • [a-zA-Z0-9']+ - 一个或多个 ASCII 字母或数字或'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM