import re
regex = re.compile(r"(interface [a-zA-Z0-9 <>,\.\/*?[\s]]* \{|(@Immutable|@ThreadSafe|@NotThreadSafe)(.*[\n])*.*(class|enum) [a-zA-Z0-9\s<>,\.\/*?]* \{)")
test_str = ("package de.invesdwin.common.persistence.jpa.api.dao;\n\n"
"import java.io.Serializable;\n"
"import java.lang.reflect.Field;\n"
"import java.util.ArrayList;\n"
"import java.util.List;\n\n"
"import javax.annotation.concurrent.ThreadSafe;\n"
"import javax.persistence.ElementCollection;\n"
"import javax.persistence.Embedded;\n"
"import javax.persistence.Query;\n"
"import javax.persistence.TypedQuery;\n\n"
"import org.apache.commons.lang3.mutable.MutableBoolean;\n"
"import org.springframework.data.domain.Page;\n"
"import org.springframework.data.domain.Pageable;\n"
"import org.springframework.data.domain.Sort;\n"
"import org.springframework.data.jpa.repository.support.SimpleJpaRepository;\n"
"import org.springframework.transaction.annotation.Transactional;\n"
"import org.springframework.util.ReflectionUtils.FieldCallback;\n\n"
"import de.invesdwin.common.lang.Assertions;\n"
"import de.invesdwin.common.lang.Reflections;\n"
"import de.invesdwin.common.persistence.jpa.PersistenceProperties;\n"
"import de.invesdwin.common.persistence.jpa.api.query.QueryConfig;\n\n"
"/**\n"
" * A DAO (DataAccessObject) is a special Repository that works for only one Entity. It implements default\n"
" * CRUD-Operations for it.\n"
" * \n"
" * JPA Entity attached/detaches status is automatically handled, so you don't need to care about that.\n"
" * \n"
" * @author subes\n"
" */\n"
"@ThreadSafe\n"
"public abstract class ACustomIdDao<E, PK extends Serializable> extends ARepository implements IDao<E, PK> {\n\n"
" private final Class<E> genericType;\n"
" private final boolean deleteInBatchSupported;\n"
" private final QueryByExampleHelper<E, PK> queryByExampleHelper;\n"
" private Integer connectionBatchSize;\n"
" private SimpleJpaRepository<E, PK> delegate;\n"
" private String persistenceUnitName;\n\n"
"}\n")
match = regex.search(test_str)
if match:
print(f"Match 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