如何在正则表达式中捕获非单词字符的单词

时间:2016-08-31 07:21:40

标签: regex

我有一个正则表达式来捕获字符串的特定部分

[Pp]rocess[\s]+(?<proc>[\w-]*|[\/\w-]*)\([\d]*\) killed by signal (?<signame>[\w\s]*)-(?<signum>[\d]+)

eg:Process  tivosh(1426) killed by signal Hangup-1 

输出: proc - &gt; tivosh

signame - &gt;挂机

signum - &gt; 1

在某些情况下,这个标志就是comibination&#34; Trace / breakpoint trap&#34;

eg: process  uploader(2404) killed by signal Trace/breakpoint trap-5 

请告诉我,如何捕捉单词+非单词字符?

2 个答案:

答案 0 :(得分:0)

[\w\s]*仅匹配零个或多个单词或空白字符。将更多允许的字符添加到类中,或使用惰性点模式 - .*?

[Pp]rocess\s+(?<proc>.*?)\(\d*\) killed by signal (?<signame>.*?)-(?<signum>\d+)
                     ^^^                                     ^^^

请参阅regex demo

延迟点模式将匹配除换行符之外的尽可能少的字符,直到第一个-后跟一个或多个数字(即-(?<signum>\d+)的第一个匹配项)。与(?<proc>.*?)相同 - 除了第一个(<digits_here_0_or_more>)之前的换行符之外,它将匹配任何字符。

此外,使用字符类(括号)包装单个速记字符类没有意义:[\s]* = \s*

答案 1 :(得分:0)

这是捕获任何单词,空格,无字符的方法。

[\w\s\W]