import re
import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401
def iter_value(value: str, character: str, incr: bool) -> list:
"""
Iterate through characters in the 'value' string and match against the 'character'
Args:
value (str): The value to iterate through (each character)
character (str): The character to match against
Returns:
list: A list of all the indexes in the 'value' string, where the 'character' matches
"""
indexes = []
for x in range(len(value)):
if value[x] == character:
if incr:
indexes.append(x + 1)
else:
indexes.append(x)
return indexes
def extract_inbetween(value: str, start: str, end: str) -> str:
"""
Use regex to extract the value from 'value' using 'start' as
the starting point and 'end' as the ending point. The 'start' will
be used as a regex match and will match the FIRST instance. The 'end'
will be used as a regex match and will match the LAST instance.
Args:
value (str): The string to search for regex matches in
start (str): The regex to use for the starting match
end (str): The regex to use for the ending match
Returns:
str: The extracted string from 'value'.
"""
if isinstance(value, str):
if start in value and end in value:
if len(start) == 1:
start_indicies = iter_value(value, start, True)
else:
start_indicies = [(x.start() + len(start)) for x in re.finditer(start, value)]
if len(end) == 1:
end_indicies = iter_value(value, end, False)
else:
end_indicies = [x.start() for x in re.finditer(end, value)]
start_index = start_indicies[0]
end_index = end_indicies[-1]
value = value[start_index:end_index]
else:
raise DemistoException("ERROR: The input value must be a string")
return value
def main():
args = demisto.args()
value = args.get("value")
start = args.get("from")
end = args.get("to")
try:
return_results(extract_inbetween(value, start, end))
except Exception as err:
return_error(f"An error occurred - {err}")
if __name__ in ["__main__", "__builtin__", "builtins"]:
main()