python - 识别正则表达式匹配的前缀

标签 python regex

我有一个模块需要从 TCP 套接字接收一些数据,并且我有一个正则表达式可用于验证我收到的数据。

现在我面临着知道何时收到我正在等待的所有数据的问题。如果我已经收到的数据与正则表达式不匹配,则可能意味着对等方向我发送了无效数据,我必须拒绝该数据,或者我尚未收到所有数据,并且我必须阻塞套接字才能读取更多。

无法更改协议(protocol),因为发件人不在我的控制范围内。

有什么方法可以判断一个字符串是否是与特定正则表达式匹配的字符串的有效前缀?

例如,给定正则表达式 (ab)*cd 我想识别字符串 abaababc 因为它们都是前缀ababcd 并拒绝 abac,因为它永远无法扩展为正则表达式的匹配。

我知道这原则上是可能的,因为任何正则表达式都可以变成有限自动机,并且修改有限自动机以识别匹配的前缀是微不足道的。但我发现没有办法在 Python 中使用正则表达式来实现这一点。

这可以做到吗?

最佳答案

正确的搜索关键字是正则表达式 partial matches 。您可以在这里找到它:https://pypi.python.org/pypi/regex

来自文档:

>>> pattern = regex.compile(r'\d{4}')
>>> # Initially, nothing has been entered:
>>> print(pattern.fullmatch('', partial=True))
<regex.Match object; span=(0, 0), match='', partial=True>
>>> # An empty string is OK, but it's only a partial match.
>>> # The user enters a letter:
>>> print(pattern.fullmatch('a', partial=True))
None
>>> # It'll never match.
>>> # The user deletes that and enters a digit:
>>> print(pattern.fullmatch('1', partial=True))
<regex.Match object; span=(0, 1), match='1', partial=True>
>>> # It matches this far, but it's only a partial match.
>>> # The user enters 2 more digits:
>>> print(pattern.fullmatch('123', partial=True))
<regex.Match object; span=(0, 3), match='123', partial=True>
>>> # It matches this far, but it's only a partial match.

关于python - 识别正则表达式匹配的前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31804781/

相关文章:

python - 名称错误 : _gradient_descent() got an unexpected keyword argument 'n_iter_check'

python - Python3 单元测试中的 Proxyquire 等效项

c# - 正则表达式不匹配数字后跟某个字符

python - Django : How to add/remove/update translation phrases (in po files) in django admin area?

python - 计算每组的滚动总和

regex - 为什么人们捍卫正则表达式语法?

java - Android:通过Regex方法传递文本,并显示在EditText上

python - 用于匹配两个字符之间的文本同时忽略反斜杠字符的正则表达式

python - Pandas 散点图日期时间

java - 正则表达式:匹配固定短语和后面的单词/字符,并在某个单词处停止(AND)