Grapevine C # 4.1.1 [дубликат]

Это очень сработало для меня:

/// <summary>
/// Kill a process, and all of its children, grandchildren, etc.
/// </summary>
/// <param name="pid">Process ID.</param>
private static void KillProcessAndChildren(int pid)
{
    // Cannot close 'system idle process'.
    if (pid == 0)
    {
        return;
    }
    ManagementObjectSearcher searcher = new ManagementObjectSearcher
            ("Select * From Win32_Process Where ParentProcessID=" + pid);
    ManagementObjectCollection moc = searcher.Get();
    foreach (ManagementObject mo in moc)
    {
        KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
    }
    try
    {
        Process proc = Process.GetProcessById(pid);
        proc.Kill();
    }
    catch (ArgumentException)
    {
        // Process already exited.
    }
}

Обновление 2016-04-26

Протестировано на Visual Studio 2015 Update 2 в Win7 x64.

Обновление 2017-11-14

Добавлена ​​проверка процесса простоя системы if (pid == 0)

Обновление 2018 -03-02

Нужно добавить ссылку на пространство имен System.Management, см. Комментарий от @MinimalTech ниже. Если у вас установлен ReSharper, он предложит вам сделать это автоматически.

49
задан Lev Levitsky 21 December 2012 в 13:51
поделиться

3 ответа

"В режиме по умолчанию Dot (.) соответствует любому символу, кроме новой строки. Если указан флаг DOTALL, это соответствует любому символу, включая новую строку." (python Doc)

Итак, если вы хотите оценить точную букву, я думаю, вы должны поместить ее в квадратные скобки:

>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
10
ответ дан StackUser 22 August 2018 в 09:02
поделиться

В вашем regex вам нужно избежать dot(.) - "\." или использовать его внутри character class - "[.]", так как это метасимвол в регулярном выражении, который соответствует любому символу.

Кроме того, вам нужно \w+ вместо \w для соответствия одному или нескольким словам.


Теперь, если вы хотите содержание test.this, тогда split не то, что вам нужно. split разделит вашу строку вокруг test.this. Например: -

>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']

Вы можете использовать re.findall : -

>>> re.findall(r'\w+[.]\w+(?=@)', s)   # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s)     # capture group
['test.this']
21
ответ дан Uli Köhler 22 August 2018 в 09:02
поделиться
  • 1
    +1 для класса символов. Используя gcovr из файла Jenkins и пытаясь исключить точечные каталоги, и Дженкинс не понимает escape-последовательности. Класс персонажа работал красиво. – Jonathan Landrum 1 June 2018 в 20:09

A . в регулярном выражении является метасимволом, он используется для соответствия любому символу. Чтобы соответствовать буквальной точке, вам нужно ее избежать, поэтому \.

81
ответ дан Yuushi 22 August 2018 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: