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
    -空白
  • (\S+)
    -子匹配1捕获一个或多个非空白字符
  • $
    -字符串结束

如果您想获得<强>行<强>,从<代码> 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)
    多行修改器,
    ^
    现在匹配行的开头,
    $
    将匹配行的结尾)
  • [^\S\r\n]*
    -零个或多个空格,LF和CR除外(=水平空格)
  • 111
    -文字
    111
  • [^\r\n]*
    -除CR和LF之外的任何0+字符,尽可能多到最后一个
  • [^\S\r\n]
    -水平空格
  • (\S+)
    -子匹配1捕获1+个非空白字符
  • $
    -行尾(在前面加上
    [^\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
    -空白
  • (\S+)
    -子匹配1捕获一个或多个非空白字符
  • $
    -字符串结束

如果您想获得<强>行<强>,从<代码> 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)
    多行修改器,
    ^
    现在匹配行的开头,
    $
    将匹配行的结尾)
  • [^\S\r\n]*
    -零个或多个空格,LF和CR除外(=水平空格)
  • 111
    -文字
    111
  • [^\r\n]*
    -除CR和LF之外的任何0+字符,尽可能多到最后一个
  • [^\S\r\n]
    -水平空格
  • (\S+)
    -子匹配1捕获1+个非空白字符
  • $
    -行尾(在前面加上
    [^\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+$