import re
regex = re.compile(r"(?<!\d)(?<!_)(?<![a-zA-z])string(?!\d)(?!_)(?![a-zA-Z])", flags=re.MULTILINE)
test_str = ("module mpi_hello_world\n"
" use mpi\n"
" implicit none\n"
"contains\n"
" subroutine hello_world(size, & ! testtest\n"
" & r_ank, &!\n"
" & myhostname &\n"
" & )\n"
"! this is a comment\n"
" ! this also\n"
" integer, intent(in) :: size, rank23, rank_er,ranking, myrank, my2r_ank\n"
" character(len = *), intent(out) :: myhostname\n\n"
" integer :: stat\n"
" \n"
" myhostname = \"(no host name)\"\n"
"#ifdef __INTEL_COMPILER\n"
" call get_environment_variable(\"COMPUTERNAME\", myhostname)\n"
"#else\n"
" stat = hostnm(myhostname)\n"
"#endif \n\n"
" write(*, *) \"Hello world FORTRAN rank:\", rank, \" size:\", size, &\n"
" & \"hostname:\", trim(myhostname)\n"
" \n"
" end subroutine hello_world\n"
"end module mpi_hello_world\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