Python 正则表达式:负字符类的异常
将Python与Matthew Barnett的正则表达式模块一起使用 我有这个字符串:Python 正则表达式:负字符类的异常,python,regex,Python,Regex,将Python与Matthew Barnett的正则表达式模块一起使用 我有这个字符串: The well known *H*rry P*tter*. 我使用这个正则表达式处理星号以获得H*rry p*tter: REG=re.compile(r”“” (? 问题: 只有在否定类没有被单词字符包围的情况下,才可以告诉否定类在内部星号处阻塞吗 我尝试了这些模式,但徒劳无功: ([^(?:[^\p{L}\p{N}]\*[^\p{L}\p{N}])]*?) ([^(?) 对于上述情况,我建议使用单
The well known *H*rry P*tter*.
我使用这个正则表达式处理星号以获得H*rry p*tter
:
REG=re.compile(r”“”
(?
问题:
只有在否定类没有被单词字符包围的情况下,才可以告诉否定类在内部星号处阻塞吗
我尝试了这些模式,但徒劳无功:
([^(?:[^\p{L}\p{N}]\*[^\p{L}\p{N}])]*?)
([^(?)
对于上述情况,我建议使用单一正则表达式替换:
re.sub(r'\B\*\b([^*]*(?:\b\*\b[^*]*)*)\b\*\B', r'<em>\1</em>', s)
re.sub(r'\B\*\B([^*]*(?:\B\*\B[^*]*)*))\B\*\B',r'\1',s)
见
详细信息:
\B\*\B
-前面有非单词边界,后面有单词边界的*
([^*]*(?:\b\*\b[^*]*)*)
-第1组捕获:
[^*]*
-0+字符,而非*
(?:\b\*\b[^*]*)*
-零个或多个序列:
\b\*\b
-a*
包含单词边界
[^*]*
-0+字符,而非*
\b\*\b
-a*
,后面跟一个非单词边界,前面跟一个单词边界
有关单词边界和非单词边界的更多信息:
您可以分享替换代码本身吗?另外,您可能需要re.sub(r'\B\*\B([^*]*(?:\B\*\B[^*]*))\B\*\B',r'\1',s)
?(如果是Python2.x,则添加u
前缀以强制使用re.UNICODE
标志)。你的意思是?@WiktorStribiżew它只是一个与你类似的re.sub,重复两次以匹配一个嵌套级别。我现在试试你的建议。你这里的嵌套模式是什么意思?如果你找到了答案,就没有更多的讨论了。如果替换字符串是\2
,我建议的正则表达式有效。我建议的正则表达式与@WiktorStribiżew,但由于他是一个编辑速度很快的人,我在发表评论之前没有看到他的编辑。
re.sub(r'\B\*\b([^*]*(?:\b\*\b[^*]*)*)\b\*\B', r'<em>\1</em>', s)