Я просто использовал микс python для реализации модульного тестирования для python milters. Как правило, milter разговаривает с MTA, что затрудняет тестирование модулей. Контрольный mixin переопределяет методы, которые говорят с MTA, и создайте имитированную среду, управляемую тестовыми примерами.
Итак, вы берете немодифицированное приложение milter, такое как spfmilter и mixin TestBase, например:
class TestMilter(TestBase,spfmilter.spfMilter):
def __init__(self):
TestBase.__init__(self)
spfmilter.config = spfmilter.Config()
spfmilter.config.access_file = 'test/access.db'
spfmilter.spfMilter.__init__(self)
Затем используйте TestMilter в тестовых примерах для приложения milter:
def testPass(self):
milter = TestMilter()
rc = milter.connect('mail.example.com',ip='192.0.2.1')
self.assertEqual(rc,Milter.CONTINUE)
rc = milter.feedMsg('test1',sender='good@example.com')
self.assertEqual(rc,Milter.CONTINUE)
milter.close()
Вы можете использовать следующий regex глобально:
\[(.*?)\]
Объяснение:
\[
: [
является метасимволом и должен быть экранирован, если вы хотите сопоставить его буквально. (.*?)
: соответствует всему не жадному способу и захватывает его. \]
: ]
является мета-символом и должен быть экранирован, если вы хотите подобрать его буквально. , если Вы хотите фильтр только маленькая буква алфавита между квадратной скобкой a-z
(\[[a-z]*\])
, если Вы хотите маленький и ограничения letter a-zA-Z
(\[[a-zA-Z]*\])
, если Вы хотите маленькие заглавные буквы и номер letter a-zA-Z0-9
(\[[a-zA-Z0-9]*\])
, если Вы хотите все между квадратной скобкой
, если Вы хотите текст, число и символы
(\[.*\])
На всякий случай Вы, возможно, имели незакрытые скобки , можно, вероятно, разработать некоторое выражение с рекурсией, подобной,
\[(([^\]\[]+)|(?R))*+\]
, который, конечно, это коснулось бы языка или механизма RegEx, который Вы могли бы использовать.
Кроме этого,
\[([^\]\[\r\n]*)\]
или,
(?<=\[)[^\]\[\r\n]*(?=\])
хорошие варианты исследовать.
<час>, Если Вы хотите упростить/изменить/исследовать выражение, оно было объяснено на верхней правой панели regex101.com . Если бы Вы хотели бы, можно также смотреть в эта ссылка , как она соответствовала бы против некоторых демонстрационных исходных данных.
<час>jex.im визуализирует регулярные выражения:
const regex = /\[([^\]\[\r\n]*)\]/gm;
const str = `This is a [sample] string with [some] special words. [another one]
This is a [sample string with [some special words. [another one
This is a [sample[sample]] string with [[some][some]] special words. [[another one]]`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Регулярное выражение для соответствия сбалансированным круглым скобкам
Могут ли скобки быть вложенными?
Если нет: \[([^]]+)\]
соответствует одному элементу, включая квадратные скобки. Обратная ссылка \1
будет содержать элемент, который нужно сопоставить. Если ваш regex поддерживает lookaround, используйте
(?<=\[)[^]]+(?=\])
Это будет соответствовать только элементу внутри скобок.