Python 正则表达式:负字符类的异常

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}])]*?) ([^(?) 对于上述情况,我建议使用单

将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}])]*?)
  • ([^(?)

对于上述情况,我建议使用单一正则表达式替换:

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)