执行正则表达式查找全部的更好方法

我正在尝试使用正则表达式从字符串中提取一些文本。给定一个字符串,我希望提取“标签”。标签可以通过两种方式定义:


1) 一个@符号 eg后面的单个单词@tag应该返回tag
2)@""eg之间的多个单词@"multiple words tag"应该返回multiple words tag

对于 (1),我有模式\B@\w+,对于 (2),我有模式@"(.*?)"

我有几个问题: a) 模式 1 返回带有still 前缀
的标签。@如何更改模式以仅返回不带的单词@


b) 如何将这些模式组合成一个可用于以下用途的模式:

re.findall(pattern, string)

先感谢您。


偶然的你
浏览 89回答 2
2回答

慕沐林林

条件正则表达式的一个很好的用例:@(")?((?(1)[^"]+|\w+))请参阅regex101.com 上的演示。看import retext = """lorem ipsum @"multiple words tag"lorem ipsum @tag """tags = [m.group(2) for m in re.finditer(r'@(")?((?(1)[^"]+|\w+))', text)]print(tags)# ['multiple words tag', 'tag']为了替换匹配项并获取标签,请使用以下代码:import retext = """lorem ipsum @"multiple words tag"lorem ipsum @tag """tags = []def replacer(match):    tags.append(match.group(2))    return ""text = re.sub(r'@(")?((?(1)[^"]+|\w+))(?(1)")', replacer, text)print(text)print(tags)

拉莫斯之舞

关于 a)/b):我会为 python 3.7-3.8 建议以下正则表达式:@(?:"((?:\w+\s{1}){0,}\w+)"){0,1}(?:(\w+){0,1})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python