A small boolean + positional query engine with a proper parser.
Project description
LexiQuery
🌐 Language / 语言 · English | 中文
English Version
✨ Highlights
- 🔀 Boolean logic: Parentheses >
NOT> (AND/OR/XORevaluated left-to-right) for predictable chains. - ⛓️ Comma chains:
alpha, foo BEF/1 barevaluates each segment like implicitAND. - 📍 Positional windows:
BEF,AFT,NEARaccept/n,/m-n, or/*, and can chainIN(...)(all targets) /INOF(...)(any target). - 📏 Length guards:
LEN/3-10for token counts,SIZE/32-128for byte ranges. - 🎯 Match helpers:
ONLY,LIKE,STR,ENDcover set equality, fuzzy presence, and start/end checks. - 🃏 Wildcards:
foo*orfoo *match every token sharing the prefix. - 📚 Docs: Detailed syntax in
LANGUAGE_MANUAL.md.
🚀 Quickstart
from lexiquery import LexiQueryExpression
expr = LexiQueryExpression(
"(foo XOR bar) AND LEN/3-10 AND foo BEF/2 IN(bar baz)"
)
expr.query("foo baz qux") # True
expr.query("bar foo baz qux") # False
from lexiquery import LexiQuery
engine = LexiQuery("foo bar baz qux")
assert engine.query("foo BEF/2 bar")
📦 Install
python -m pip install lexiquery
🧪 Tests
PYTHONPATH=src pytest
🧩 Syntax Cheat Sheet
| Category | Example |
|---|---|
| Boolean | (foo OR bar) AND NOT baz |
| Positional | alpha BEF/2-4 beta, foo AFT/* bar, foo NEAR/3 beta |
| Positional + Sets | foo BEF/3 IN(bar baz), foo BEF/* INOF(alpha beta) |
| Length | LEN/5-10 AND foo BEF/2 bar, NOT SIZE/32 |
| Match | LIKE foo bar, ONLY foo bar, STR hello world, END goodbye |
| Wildcard | foo* NEAR/1 bar, NOT app* |
More samples in tests/test_core.py & tests/test_new_ops.py.
📄 License
MIT License.
中文版本
✨ 功能亮点
- 🔀 布尔优先级:括号 >
NOT> (AND/OR/XOR左到右计算),更贴近自然阅读。 - ⛓️ 多段表达式:使用逗号分段,如
alpha, foo BEF/1 bar,效果等同连续AND。 - 📍 位置窗口:
BEF、AFT、NEAR支持/n、/m-n、/*,还能链式追加IN(...)(全部满足)或INOF(...)(任一满足)。 - 📏 长度约束:
LEN/3-10控制词数,SIZE/32-128控制字节长度。 - 🎯 匹配运算:
ONLY、LIKE、STR、END覆盖集合判断与首尾匹配。 - 🃏 通配符:
foo*/foo *匹配所有以foo开头的 token。 - 📚 文档:详尽语法见
LANGUAGE_MANUAL.md。
🚀 快速体验
from lexiquery import LexiQueryExpression
expr = LexiQueryExpression(
"(foo XOR bar) AND LEN/3-10 AND foo BEF/2 IN(bar baz)"
)
expr.query("foo baz qux") # True
expr.query("bar foo baz qux") # False
from lexiquery import LexiQuery
engine = LexiQuery("foo bar baz qux")
assert engine.query("foo BEF/2 bar")
📦 安装
python -m pip install lexiquery
🧪 运行测试
PYTHONPATH=. pytest
🧩 语法速查
| 分类 | 示例 |
|---|---|
| 布尔 | (foo OR bar) AND NOT baz |
| 位置 | alpha BEF/2-4 beta、foo AFT/* bar、foo NEAR/3 beta |
| 位置 + 集合 | foo BEF/3 IN(bar baz)、foo BEF/* INOF(alpha beta) |
| 长度 | LEN/5-10 AND foo BEF/2 bar、NOT SIZE/32 |
| 匹配 | LIKE foo bar、ONLY foo bar、STR hello world、END goodbye |
| 通配 | foo* NEAR/1 bar、NOT app* |
更多示例请参考 tests/test_core.py 与 tests/test_new_ops.py。
📄 许可
MIT 许可证。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
lexiquery-0.2.1.tar.gz
(12.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lexiquery-0.2.1.tar.gz.
File metadata
- Download URL: lexiquery-0.2.1.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
beda68c938f7ab646bc7dbf0cefb7aa82dd06cb72307e1528f4b710b431e95f4
|
|
| MD5 |
f8eeb466c77a78ee426f97753341bd85
|
|
| BLAKE2b-256 |
a073f7ed150090e20cf9eb340d6608b9f263f1b349d24a14e2d4d57b10e78471
|
File details
Details for the file lexiquery-0.2.1-py3-none-any.whl.
File metadata
- Download URL: lexiquery-0.2.1-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43bf1ebc503c3dd84b728ffafb7e53bddeaf4a2ccf56a3a438a78e12221e7c37
|
|
| MD5 |
5821dbf7edbd06cf1b6ece3cacb64b83
|
|
| BLAKE2b-256 |
16b41aa1201e66fc587584b0aad14bb96e2697c7e22363adbf3cf3ec1f2084f4
|