gpt4 book ai didi

regex - python re.split() 空字符串

转载 作者:行者123 更新时间:2023-12-03 22:55:14 26 4
gpt4 key购买 nike

以下示例取自 python re documents

re.split(r'\b', 'Words, words, words.')
['', 'Words', ', ', 'words', ', ', 'words', '.']

'\b' 匹配单词开头或结尾的空字符串。这意味着如果您运行此代码,它会产生错误。

(jupyter 笔记本 python 3.6)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-128-f4d2d57a2022> in <module>
1 reg = re.compile(r"\b")
----> 2 re.split(reg, "Words, word, word.")

/usr/lib/python3.6/re.py in split(pattern, string, maxsplit, flags)
210 and the remainder of the string is returned as the final element
211 of the list."""
--> 212 return _compile(pattern, flags).split(string, maxsplit)
213
214 def findall(pattern, string, flags=0):

ValueError: split() requires a non-empty pattern match.

由于\b 只匹配空字符串, split() 没有得到它的要求“非空”模式匹配。我看到了与 split() 和空字符串相关的各种问题。有些我可以看到您在实践中可能想要如何做,例如,问题 here .答案从“只是做不到”到(较旧的)“这是一个错误”不等。

我的问题是这样的:
  • 由于这仍然是python网页上的示例,这应该可能吗?在最前沿的版本中是否有可能实现?
  • 上面链接中的问题涉及re.split(r'(?<!foo)(?=bar)', 'foobarbarbazbar') ,2015年问的,仅用re.split()没办法完成要求,还是这样吗?
  • 最佳答案

    Python 3.7 re ,您可以使用零长度匹配进行拆分:

    Changed in version 3.7: Added support of splitting on a pattern that could match an empty string.



    另外,请注意

    Empty matches for the pattern split the string only when not adjacent to a previous empty match.

    >>> re.split(r'\b', 'Words, words, words.')['', 'Words', ', ', 'words', ', ', 'words', '.']
    >>> re.split(r'\W*', '...words...')['', '', 'w', 'o', 'r', 'd', 's', '', '']

    >>> re.split(r'(\W*)', '...words...')['', '...', '', '', 'w', '', 'o', '', 'r', '', 'd', '', 's', '...', '', '', '']


    此外,与
    re.split(r'(?<!foo)(?=bar)', 'foobarbarbazbar')

    我收到 ['foobar', 'barbaz', 'bar']结果是 Python 3.7。

    关于regex - python re.split() 空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54391164/

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