regex以获取空格后的最后一项
如何通过正则表达式获取最后一项regex以获取空格后的最后一项,regex,go,Regex,Go,如何通过正则表达式获取最后一项 "Read the information failed. 111 a bcd SAM Error Log not up supported" 是我干的 111\s(.*)$ 但它给了我 output = "a bcd sam" 但是,我想要以111开头的正则表达式的输出 output = "sam" // for the line starts with 111 此外,如果111之前有空格,我如何进行更改 您可以在进行测试,这应该适合您: \s(\w+
"Read the information failed.
111 a bcd
SAM Error Log not up supported"
是我干的
111\s(.*)$
但它给了我
output = "a bcd sam"
但是,我想要以111开头的正则表达式的输出
output = "sam" // for the line starts with 111
此外,如果111之前有空格,我如何进行更改
您可以在进行测试,这应该适合您:
\s(\w+)$ // The output will be `sam`
这意味着捕获空格后的最后一个字符串(
$
)。这应该适用于您:
\s(\w+)$ // The output will be `sam`
这意味着捕获空格后的最后一个字符串($
)。请注意,111\s(.*)$
匹配字符串中的任何位置(第一次出现),然后捕获到子匹配1字符串末尾的任何0+字符
如果在最后一个sam
之前有空格,则可以使用
^111.*\s(\S+)$
图案说明:
-字符串的开头^
-文字子字符串111
111
-任何字符,0或更多,尽可能多到最后一个*
-空白\s
-子匹配1捕获一个或多个非空白字符(\S+)
-字符串结束$
如果您想获得<强>行<强>,从<代码> 111 开始(并且允许任何领先的空白),并且在您的子匹配之后有一些空白,您可以考虑
(?m)^\s*111[^\r\n]*\s(\S+)$
(一个
被替换为[^\r\n]
,因为在Go正则表达式中,点
匹配任何字符,包括换行符),或者-为了确保只匹配水平空白:
(?m)^[^\S\r\n]*111[^\r\n]*[^\S\r\n](\S+)$
甚至
(?m)^[^\S\r\n]*111[^\r\n]*[^\S\r\n](\S+)$
说明:
-行的开头(由于(?m)^
多行修改器,(?m)
现在匹配行的开头,^
将匹配行的结尾)$
-零个或多个空格,LF和CR除外(=水平空格)[^\S\r\n]*
-文字111
111
-除CR和LF之外的任何0+字符,尽可能多到最后一个[^\r\n]*
-水平空格[^\S\r\n]
-子匹配1捕获1+个非空白字符(\S+)
-行尾(在前面加上$
或[^\S\r\n]*
以允许尾随的水平空白)[^\S\n]*
[]string{[]string{“111 a bcd sam”,“sam”},[]string{“111 sam”,“sam”}
注意,111\s(.*$
匹配111
字符串中的任何位置(第一次出现),然后捕获到子匹配1字符串末尾的任何0+字符
如果在最后一个sam
之前有空格,则可以使用
^111.*\s(\S+)$
图案说明:
-字符串的开头^
-文字子字符串111
111
-任何字符,0或更多,尽可能多到最后一个*
-空白\s
-子匹配1捕获一个或多个非空白字符(\S+)
-字符串结束$
如果您想获得<强>行<强>,从<代码> 111 开始(并且允许任何领先的空白),并且在您的子匹配之后有一些空白,您可以考虑
(?m)^\s*111[^\r\n]*\s(\S+)$
(一个
被替换为[^\r\n]
,因为在Go正则表达式中,点
匹配任何字符,包括换行符),或者-为了确保只匹配水平空白:
(?m)^[^\S\r\n]*111[^\r\n]*[^\S\r\n](\S+)$
甚至
(?m)^[^\S\r\n]*111[^\r\n]*[^\S\r\n](\S+)$
说明:
-行的开头(由于(?m)^
多行修改器,(?m)
现在匹配行的开头,^
将匹配行的结尾)$
-零个或多个空格,LF和CR除外(=水平空格)[^\S\r\n]*
-文字111
111
-除CR和LF之外的任何0+字符,尽可能多到最后一个[^\r\n]*
-水平空格[^\S\r\n]
-子匹配1捕获1+个非空白字符(\S+)
-行尾(在前面加上$
或[^\S\r\n]*
以允许尾随的水平空白)[^\S\n]*
[]string{[]string{“111 a bcd sam”,“sam”},[]string{“111 sam”,“sam”}
您可以使用以下命令:
^\s*1{3}.*\s(\S+)$
^
行的开头
\s*
0或更多出现在开头的空格
1{3}
后跟三个一(即111)
*
后跟任何内容
\s
后跟空格
(\S+)$
以非空格字符结尾。第一捕获组 您可以使用:
^\s*1{3}.*\s(\S+)$
^
行的开头
\s*
0或更多出现在开头的空格
1{3}
后跟三个一(即111)
*
后跟任何内容
\s
后跟空格
(\S+)$
以非空格字符结尾。第一捕获组 如果字符串以111
开头,则要获取最后一块非空白字符?是true。在这种情况下,我想要“山姆”。i、 e.空格后的最后一个元素如果不应选中111
,则\S+$
就足够了。但是以111开头的字符串不是一种更简单的非正则表达式方法吗func Index(s,sep string)int
+func Split(s,sep string)[/string
可以生成预期结果。如果字符串以111
开头,是否要获取最后一块非空白字符?是true。在这种情况下,我想要“山姆”。i、 e.空格后的最后一个元素如果不应选中111
,则\S+$