# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"[^ -~]"
test_str = (" Punctuation marks are standardized marks or signs used to clarify the meaning and separate structural units of text. The General Category property assigns characters to either Punctuation or Symbol based on their primary usage.\n\n"
"Q: Can you give a more complete list of Unicode punctuation characters that often should be treated as symbols?\n\n"
"A: Because this issue is about conflicting usage, it is not possible to generate a comprehensive list, however some of the most common ones are:\n"
"U+0023 ( # ) NUMBER SIGN\n"
"U+0026 ( & ) AMPERSAND\n"
"U+0040 ( @ ) COMMERCIAL AT\n"
"U+0025 ( % ) PERCENT SIGN\n"
"U+2030 ( ‰ ) PER MILLE SIGN\n"
"U+2031 ( ‱ ) PER TEN THOUSAND SIGN \n"
"U+002A ( * ) ASTERISK\n"
"U+2020 ( † ) DAGGER\n"
"U+2021 ( ‡ ) DOUBLE DAGGER\n"
"U+203B ( ※ ) REFERENCE MARK\n\n"
"Łąka\n"
"Русский\n"
"维基百科,自由的百科全书")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html