当前位置: 首页 > 知识库问答 >
问题:

将u“”附加到正则表达式有什么意义?

淳于开畅
2023-03-14

Python的< code>docutils模块中的一个组件在机器中使用了下面的正则表达式,该表达式用于将带有星号的文本转换为斜体文本:

原始:大多数人都知道拉丁语短语*Carpe Diem*的意思。

大多数人都知道拉丁语“及时行乐”是什么意思。

这是一个非常简单的模式:如果前面没有空格、换行符或空字符,请匹配星号。我想知道的是将空的 unicode 字符串 (u'') 附加到模式会得到什么?它被附加到文档utils中也发现的许多其他模式中,但我不知道它对给定的文本是否匹配有什么区别。

non_whitespace_escape_before = r'(?<![ \n\x00])'
end_string_suffix = u''

emphasis=re.compile(non_whitespace_escape_before + r'(\*)' + end_string_suffix, re.U)
# emphasis.pattern -> u'(?<![ \\n\\x00])(\\*)'

共有1个答案

徐洛华
2023-03-14

你错过了字符串并不总是空的;来自相关源代码:

if getattr(settings, 'character_level_inline_markup', False):
    start_string_prefix = u'(^|(?<!\x00))'
    end_string_suffix = u''
else:
    start_string_prefix = (u'(^|(?<=\\s|[%s%s]))' %
                           (punctuation_chars.openers,
                            punctuation_chars.delimiters))
    end_string_suffix = (u'($|(?=\\s|[\x00%s%s%s]))' %
                         (punctuation_chars.closing_delimiters,
                          punctuation_chars.delimiters,
                          punctuation_chars.closers))

好处是变量到处都有定义;并不是说它是空的。如果它是空的,这确实没有什么区别,但是如果启用了< code > character _ level _ inline _ markup 特性,那么现在编译的模式会有一个后缀,与空字符串相比,它会改变行为。

docutils项目在Python 2中混合字节串和Unicode字符串时有点草率;他们逃脱了这一点,因为所有连接到Unicode字符串的字节串碰巧都是ASCII干净的,因此可以隐式解码。

 类似资料:
  • 问题内容: 我在以下正则表达式中找到了它: 它将方括号(及其内容)与嵌套方括号匹配。 问题答案: 是一个字符类,表示除和以外的所有字符。 您可以避免转义和特殊字符,因为它对于PCRE(函数中使用的正则表达式引擎)不是模棱两可的。 由于在PCRE中不正确,因此正则表达式解析的唯一方法是在字符类内部,该字符类稍后将关闭。与以下相同。它不能重新打开字符类内的字符类(POSIX字符类除外)。然后最后一个清

  • 问题内容: 为什么PHP正则表达式具有周围的定界符?如果将任何模式修饰符作为参数传递给正在使用的任何函数,似乎会更加清楚。 问题答案: 没有技术原因必须如此。 如注释中所述,底层库不需要将标志作为正则表达式的一部分进行传递-实际上,扩展名必须剥离这些标志并将其作为单独的参数传递。 似乎原始的实现者正试图使其看起来像grep / sed / awk / perl / etc,以便那些使用这些工具的程

  • 和?我试着在谷歌上搜索,但没有成功。

  • 正则表达式是为复杂搜索指定模式的强大方式。 MySQL采用Henry Spencer的正则表达式实施,其目标是符合POSIX 1003.2。请参见附录C:感谢。MySQL采用了扩展的版本,以支持在SQL语句中与REGEXP操作符一起使用的模式匹配操作。请参见3.3.4.7节,“模式匹配”。 在本附录中,归纳了在MySQL中可用于REGEXP操作的特殊字符和结构,并给出了一些示例。本附录未包含可在H

  • 问题内容: 以下代码是众所周知的将重音符转换为纯文本的代码: 我用这种方法代替了“手工制作”方法,但是我需要了解replaceAll的“ regex”部分 1)什么是“ InCombiningDiacriticalMarks”? 2)它的文档在哪里?(和类似的?) 谢谢。 问题答案: 是Unicode块属性。在JDK7中,您将可以使用两部分表示法来编写它,这对于读者来说可能更清楚。它在UAX#44

  • 我试图理解正则表达式^(\d{1,2})$在google Sheets中代表什么。快速浏览一下regex站点和intools让我感到困惑。有谁能帮忙吗?