Предполагая, что вы можете использовать lookbehind / lookaheads и что ваше регулярное выражение поддерживает lookbehinds переменной длины (только JGSoft / .NET)
(?<='[#0-9]*)#\d+(?=[#0-9]*')
Должно работать ... Протестировано с использованием этого сайта и получили следующие результаты:
1. #39
2. #39
3. #39
4. #226
5. #8218
6. #172
7. #39
Разбить его довольно просто:
(?<= # Start positive lookbehind group - assure that the text before the cursor
# matches the following pattern:
' # Match the literal '
[#0-9]* # Matches #, 0-9, zero or more times
) # End lookbehind...
#\d+ # Match literal #, followed by one or more digits
(?= # Start lookahead -- Ensures text after cursor matches (without advancing)
[#0-9]* # Allow #, 0-9, zero or more times
' # Match a literal '
)
Итак, этот шаблон будет соответствовать #\d+
, если текст перед ним '[#0-9]*
итекст после [#0-9]*'