lin开头的可选匹配

2024-03-28 08:18:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python创建一个与hashtags匹配的正则表达式。我对标签的定义是:

  • 这是一个以#开头的作品
  • 它可以包含除[ ,\.]之外的所有字符
  • 它可以在文本中的任何位置

所以在本文中

#This string cont#ains #four, and #only four #hashtags.

这里的哈希值是Thisfouronly和{}。在

我遇到的问题是行开头的可选检查。在

  • [ \.,]+不会这样做,因为它与可选的开头不匹配。在
  • [ \.,]?不会这样做,因为它匹配太多。在

用+

^{pr2}$

举例说明?在

In []: re.findall('[ \.,]?#([^ \.,]+)', '#This string cont#ains #four, and #only four #hashtags.')
Out[]: ['This', 'ains', 'four', 'only', 'hashtags']

如何可选匹配行的开头?在


Tags: andin文本onlystring定义标签this
2条回答

这似乎有效:

>>> re.findall(r'\B#([^,\W]+)', '#This string cont#ains #four, and #only four #hashtags.')
['This', 'four', 'only', 'hashtags']
  • \B:匹配空字符串,但仅当它不在单词的开头或结尾时。这意味着r'py\B'匹配'python''py3''py2',但不是{},'py.',或{}。\B正好与\b相反,因此也受LOCALE和{}的设置的影响。在
  • \W:如果没有指定LOCALEUNICODE标志,则匹配任何非字母数字字符;这相当于集合[^a-zA-Z0-9_]。对于LOCALE,它将匹配不在集合[0-9_]中的任何字符,并且对于当前语言环境,它没有定义为字母数字。如果设置了UNICODE,则这将匹配除[0-9_]加上Unicode字符属性数据库中分类为非字母数字的字符之外的任何字符。在

在你的正则表达式之前,你可以告诉你不想要什么。在

(?<!\w)(#[^ \.,]+)

有了消极的眼神你就能做到

相关问题 更多 >