import re
regex = re.compile(r"(public|protected|private|static|\s) +[\w\<\>\[\]]+\s+(\w+) *\([^\)]*\)\s*(\{)")
test_str = ("/*\n"
" * Licensed to the Apache Software Foundation (ASF) under one or more\n"
" * contributor license agreements. See the NOTICE file distributed with\n"
" * this work for additional information regarding copyright ownership.\n"
" * The ASF licenses this file to You under the Apache License, Version 2.0\n"
" * (the \"License\"); you may not use this file except in compliance with\n"
" * the License. You may obtain a copy of the License at\n"
" *\n"
" * http://www.apache.org/licenses/LICENSE-2.0\n"
" *\n"
" * Unless required by applicable law or agreed to in writing, software\n"
" * distributed under the License is distributed on an \"AS IS\" BASIS,\n"
" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"
" * See the License for the specific language governing permissions and\n"
" * limitations under the License.\n"
" */\n"
"package org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline;\n\n"
"import org.apache.pdfbox.cos.COSDictionary;\n"
"import org.apache.pdfbox.cos.COSName;\n\n"
"/**\n"
" * This represents an outline in a pdf document.\n"
" *\n"
" * @author <a href=\"mailto:ben@benlitchfield.com\">Ben Litchfield</a>\n"
" * @version $Revision: 1.2 $\n"
" */\n"
"public final class PDDocumentOutline extends PDOutlineNode\n"
"{\n\n"
" \n"
" static java.io.BufferedWriter bfn;\n"
" static java.io.BufferedWriter bf;\n\n"
" /**\n"
" * Default Constructor.\n"
" */\n"
" public PDDocumentOutline()\n"
" {\n"
" \n"
" getCOSDictionary().setName(COSName.TYPE, COSName.OUTLINES.getName());\n"
" \n"
" }\n\n"
" /**\n"
" * Constructor for an existing document outline.\n"
" *\n"
" * @param dic The storage dictionary.\n"
" */\n"
" public PDDocumentOutline( COSDictionary dic )\n"
" {\n"
" super( dic );\n"
" getCOSDictionary().setName(COSName.TYPE, COSName.OUTLINES.getName());\n"
" }\n\n"
" @Override\n"
" public boolean isNodeOpen()\n"
" {\n"
" return true;\n"
" }\n\n"
" @Override\n"
" public void openNode()\n"
" {\n"
" // The root of the outline hierarchy is not an OutlineItem and cannot be opened or closed\n"
" }\n\n"
" @Override\n"
" public void closeNode()\n"
" {\n"
" // The root of the outline hierarchy is not an OutlineItem and cannot be opened or closed\n"
" }\n"
"}\n")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
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