RegexExtractAll
Extraction of all matches from a specified regular expression pattern from a provided string. Returns an array of results. This differs from RegexGroups in several ways: * It returns all matches of the specified pattern, not just specific groups. This is useful for extracting things using a pattern where the content of the source string is indeterminate, such as extracting all email addresses. * Some "convenience" arguments have been added to enhance usability: multi-line, ignore_case, period_matches_newline * Added a new argument, "error_if_no_match". The script will not ordinarily throw an error if a match is not found but if not using as a transformer within a playbook, it may, in certain limited circumstances, be desirable to throw an error if the expression doesn't match. * It uses the 'regex' library, which supports more some more advanced regex functionality than the standard 're' library. For more info, see https://pypi.org/project/regex/.
python · Filters And Transformers
Source
import demistomock as demisto # noqa: F401 import regex from CommonServerPython import * # noqa: F401 # pylint: disable=no-member def main(): match_target = demisto.args()["value"] re_flags = regex.V1 error_if_no_match = False unpack_matches = False try: if demisto.args()["multi_line"].lower() == "true": re_flags |= regex.MULTILINE if demisto.args()["ignore_case"].lower() == "true": re_flags |= regex.IGNORECASE if demisto.args()["period_matches_newline"].lower() == "true": re_flags |= regex.DOTALL if demisto.args()["error_if_no_match"].lower() == "true": error_if_no_match = True if demisto.args()["unpack_matches"].lower() == "true": unpack_matches = True except KeyError: pass regex_pattern = regex.compile(r"{}".format(demisto.args()["regex"]), flags=re_flags) try: matches = regex.findall(regex_pattern, match_target) if error_if_no_match is False or len(matches) != 0: if unpack_matches and matches: results = [] for m in matches: results.extend([v for v in (m if isinstance(m, tuple) else [m]) if v]) else: results = matches demisto.results(results) else: return_error("No results found") except Exception: raise if __name__ == "__builtin__" or __name__ == "builtins": main()
README
Extraction of all matches from a specified regular expression pattern from a provided string. Returns an array of results. This differs from RegexGroups in several ways:
- It returns all matches of the specified pattern, not just specific groups. This is useful for extracting things using a pattern where the content of the source string is indeterminate, such as extracting all email addresses.
- Some “convenience” arguments have been added to enhance usability: multi-line, ignore_case, period_matches_newline
- Added a new argument, “error_if_no_match”. The script will not ordinarily throw an error if a match is not found but if not using as a transformer within a playbook, it may, in certain limited circumstances, be desirable to throw an error if the expression doesn’t match.
- It uses the ‘regex’ library, which supports more some more advanced regex functionality than the standard ‘re’ library. For more info, see https://pypi.org/project/regex/.
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, e.g., The quick brown fox. |
| regex | Regex pattern to search (in Python), e.g., (The)\s(quick).*(fox). |
| multi_line | Process value in multiline mode. See more information on re.MULTILINE, see https://docs.python.org/3/library/re.html. |
| ignore_case | Whether character matching will be case-insensitive. Default is “false”. |
| period_matches_newline | Whether to make the ‘.’ character also match a new line. Default is “false”. |
| error_if_no_match | Only set to ‘true’ if used in a playbook task and you want that failure will return an error. |
| unpack_matches | Whether to unpack the tuple values of results. Default is “false”. |
Outputs
There are no outputs for this script.