gpt4 book ai didi

正则表达式与 Python 3 匹配以下划线开头和结尾的单词

转载 作者:行者123 更新时间:2023-12-01 13:15:58 27 4
gpt4 key购买 nike

我有以下示例代码,我试图匹配所有以 开头的单词实例和结尾 带下划线(单条或双条)。

import re
test = ['abc text_ abc',
'abc _text abc',
'abc text_textUnderscored abc',
'abc :_text abc',
'abc _text_ abc',
'abc __text__ abc',
'abc _text_: abc',
'abc (-_-) abc']
test_str = ' '.join(test)
print(re.compile('(_\\w+\\b)').split(test_str))

我已经尝试过以下正则表达式,但它似乎太强了(应该只匹配 _text___text__ )。

输出: ['abc text_ abc abc ', '_text', ' abc abc text', '_textUnderscored', ' abc abc :', '_text', ' abc abc ', '_text_', ' abc abc ', '__text__', ' abc abc ', '_text_', ': abc abc (-_-) abc']
您能提出更好的方法吗(最好使用单个正则表达式模式和 re.split 方法的用法)?

最佳答案

如果您想匹配任何前面或后面没有非单词字符(字母、数字和下划线以外的字符)和任何长度(甚至 1, _ )的单词字符块(字母、数字和下划线)你可以使用

r'\b_(?:\w*_)?\b'

re.findall .见 regex demo .

如果您不想匹配单字符单词(即 _ ),您需要删除可选的非捕获组,并使用 r'\b_\w*_\b' .

如果您需要匹配至少 3 个字符单词,请同时替换 * (零次或多次重复)与 + (出现一次或多次)。

如果您仅在字符串的开头/结尾或后面/前面有空格时才将单词视为整个单词,请替换 \b...\b(?<!\S)...(?!\S) :
r'(?<!\S)_\w*_(?!\S)'

another regex demo

详情
  • \b - 单词边界,必须在
  • 之前有字符串开头或非单词字符
  • _ - 下划线
  • (?:\w*_)? - 一个可选的非捕获组匹配 1 或 0 次出现
  • \w* - 0+ 字字符(字母、数字、_ s)(感谢这个可选组,甚至会找到 _ 字)
  • _ - 下划线
  • \b - 一个单词边界,在
  • 之后必须有字符串结尾或一个非单词字符
  • (?<!\S) - 左空白边界
  • (?!\S) - 右空白边界

  • Python demo :
    rx = re.compile(r'\b_(?:\w*_)?\b')
    print(rx.findall(test_str))
    # => ['_text_', '__text__']

    关于正则表达式与 Python 3 匹配以下划线开头和结尾的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55011380/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com