File tree Expand file tree Collapse file tree 3 files changed +27
-5
lines changed Expand file tree Collapse file tree 3 files changed +27
-5
lines changed Original file line number Diff line number Diff line change @@ -2,8 +2,10 @@ from __future__ import annotations
2
2
3
3
from typing import Iterable
4
4
5
+ class RegressError (Exception ): ...
6
+
5
7
class Regex :
6
- def __init__ (self , pattern : str ): ...
8
+ def __init__ (self , pattern : str , flags : str | None = None ): ...
7
9
def find (self , text : str ) -> Match | None : ...
8
10
def find_iter (self , text : str ) -> Iterable [Match ] | None : ...
9
11
Original file line number Diff line number Diff line change @@ -12,10 +12,17 @@ struct RegexPy {
12
12
#[ pymethods]
13
13
impl RegexPy {
14
14
#[ new]
15
- fn init ( value : & str ) -> PyResult < Self > {
16
- match Regex :: new ( value) {
17
- Ok ( inner) => Ok ( RegexPy { inner } ) ,
18
- Err ( e) => Err ( RegressError :: new_err ( e. to_string ( ) ) ) ,
15
+ #[ pyo3( signature = ( value, flags=None ) ) ]
16
+ fn init ( value : & str , flags : Option < & str > ) -> PyResult < Self > {
17
+ match flags {
18
+ Some ( f) => match Regex :: with_flags ( value, f) {
19
+ Ok ( inner) => Ok ( RegexPy { inner } ) ,
20
+ Err ( e) => Err ( RegressError :: new_err ( e. to_string ( ) ) ) ,
21
+ } ,
22
+ None => match Regex :: new ( value) {
23
+ Ok ( inner) => Ok ( RegexPy { inner } ) ,
24
+ Err ( e) => Err ( RegressError :: new_err ( e. to_string ( ) ) ) ,
25
+ } ,
19
26
}
20
27
}
21
28
Original file line number Diff line number Diff line change @@ -60,3 +60,16 @@ def test_error_handling():
60
60
pass
61
61
else :
62
62
pytest .fail ("error not reached" )
63
+
64
+
65
+ def test_with_flags ():
66
+ # "L" for letters, "Z" for spaces, "N" for numerics
67
+ pattern = r"^\p{L}\p{Z}\p{N}$"
68
+
69
+ regex = regress .Regex (pattern , flags = "u" )
70
+ flagless_regex = regress .Regex (pattern )
71
+
72
+ match = regex .find ("a 0" )
73
+ flagless_match = flagless_regex .find ("a 0" )
74
+ assert match is not None
75
+ assert flagless_match is None
You can’t perform that action at this time.
0 commit comments