search()#
relationalai.std.re
#search(regex: str|Producer, string: str|Producer) -> Match
Scans a string for a regular expression match and returns a Match
object for the first match found.
If regex
or string
is a Producer
, then search()
filters out non-string regex
values and non-matching string
values from the producers.
Must be used in a rule or query context.
TIP
When passing a string literal, use a raw string — which is prefaced with an r
, as in r"J.*"
— to avoid escaping special characters in regular expressions.
Parameters#
Name | Type | Description |
---|---|---|
regex | Producer or Python str | A regular expression string. |
string | Producer or Python str | The string to search. |
Returns#
A Match
object.
Example#
Use the search()
function to search for a substring that matches a regular expression anywhere in a string:
##
import relationalai as rai
from relationalai.std import alias, re
# =====
# SETUP
# =====
model = rai.Model("MyModel4")
Message = model.Type("Message")
with model.rule():
Message.add(id=1).set(text="The party starts at 8:00 PM.")
Message.add(id=2).set(text="Bring tacos")
Message.add(id=3).set(text=-1) # Non-string text
# =======
# EXAMPLE
# =======
with model.rule():
message = Message()
# Filter messages that contain a time in the format "HH:MM AM/PM".
match = re.search(r"\d{1,2}:\d{2} [AP]M", message.text)
# Since search() filters out non-matching strings and non-string values,
# the following does not set properties for the messages with IDs 2 and 3.
message.set(match=match, match_start=match.start(), match_end=match.end())
with model.query() as select:
message = Message()
response = select(
message.id,
message.text,
message.match,
message.match_start,
message.match_end,
)
print(response.results)
# id text match match_start match_end
# 0 1 The party starts at 8:00 PM. 8:00 PM 20.0 27.0
# 1 2 Bring tacos NaN NaN NaN
# 2 3 -1 NaN NaN NaN