RegexReplace

Format patterns matched with regex. If the regex does not match any pattern, the original value is returned. Example 1: value: user=john regex: user=(.*) output_format: name=\1 -> output value: name=john Example 2: value: xxx=yyy regex: user=(.*) output_format: name=\1 -> output value: xxx=yyy.

python · Filters And Transformers

Source

import re

import demistomock as demisto  # noqa: F401
from CommonServerPython import *  # noqa: F401


class Main:
    def __init__(self, input_text: str, output_format: str, regex: str, action_dt: str | None, regex_flags: int):
        self.__input_text = input_text
        self.__output_format = output_format.replace(r"\0", r"\g<0>")
        self.__pattern = re.compile(regex, flags=regex_flags)
        self.__action_dt = action_dt

    def __replace(self, m: re.Match) -> Any:
        value = m.expand(self.__output_format)
        if self.__action_dt:
            value = demisto.dt(value, self.__action_dt)
            if value is None:
                value = ""
            elif isinstance(value, bool):
                value = json.dumps(value)
            else:
                value = str(value)
        return value

    def run(self) -> Any:
        output_text = self.__pattern.sub(self.__replace, self.__input_text)
        return_results(output_text)


def main():
    args = demisto.args()
    try:
        flags = 0
        if argToBoolean(args.get("ignore_case") or False):
            flags |= re.IGNORECASE
        if argToBoolean(args.get("multi_line") or False):
            flags |= re.MULTILINE
        if argToBoolean(args.get("period_matches_newline") or False):
            flags |= re.DOTALL

        Main(
            input_text=args["value"],
            output_format=args.get("output_format") or "",
            regex=args["regex"],
            action_dt=args.get("action_dt"),
            regex_flags=flags,
        ).run()
    except Exception as err:
        # Don't return an error by return_error() as this is transformer.
        raise DemistoException(str(err))


if __name__ in ("__builtin__", "builtins", "__main__"):
    main()

README

Format patterns matched with regex. If the regex does not match any pattern, the original value is returned.

Example 1:
value: user=john
regex: user=(.*)
output_format: name=\1
-> output value: name=john

Example 2:
value: xxx=yyy
regex: user=(.*)
output_format: name=\1
-> output value: xxx=yyy

Script Data


Name Description
Script Type python3
Tags transformer, string
Cortex XSOAR Version 5.0.0

Inputs


Argument Name Description
value Text to match against
regex Regex pattern to search
output_format Template string to format patterns matched with regex
ignore_case Whether character matching will be case-insensitive. Default is “false”.
multi_line Process value in multiline mode. See more information on re.MULTILINE, see https://docs.python.org/3/library/re.html.
period_matches_newline Whether to make the ‘.’ character also match a new line. Default is “false”.
action_dt The last action for each matched value to transform

Outputs


There are no outputs for this script.