如何确保正则表达式不在 [] 或 {} 中?
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 demo。
正则表达式 - (\[[^][]*]|\{[^{}]*})|[a-zA-Z0-9']+
- 将方括号之间和大括号之间的所有子字符串匹配并捕获到组 1 中,并且只匹配字母数字字符块,并且 return matchobj.group(1) or random.choice(WORDS)
returns 组 1值(如果第 1 组匹配),或者如果第 1 组不匹配,则为随机词。
图案详情:
(
- 捕获组 #1 的开始
\[[^][]*]
- [
,然后是 ]
和 [
以外的任何零个或多个字符,然后是 ]
字符
|
- 或
\{[^{}]*}
- {
,然后是 {
和 }
以外的任何零个或多个字符,然后是 }
字符
)
- 小组结束
|
- 或
[a-zA-Z0-9']+
- 一个或多个 ASCII 字母或数字或 '
.
我正在尝试用随机单词列表替换给定句子中的所有单词。这是我的代码:
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 demo。
正则表达式 - (\[[^][]*]|\{[^{}]*})|[a-zA-Z0-9']+
- 将方括号之间和大括号之间的所有子字符串匹配并捕获到组 1 中,并且只匹配字母数字字符块,并且 return matchobj.group(1) or random.choice(WORDS)
returns 组 1值(如果第 1 组匹配),或者如果第 1 组不匹配,则为随机词。
图案详情:
(
- 捕获组 #1 的开始\[[^][]*]
-[
,然后是]
和[
以外的任何零个或多个字符,然后是]
字符|
- 或\{[^{}]*}
-{
,然后是{
和}
以外的任何零个或多个字符,然后是}
字符
)
- 小组结束|
- 或[a-zA-Z0-9']+
- 一个或多个 ASCII 字母或数字或'
.