我正在努力寻找一行的最后一个单词。该单词可能包含!@#$%^&* []等符号。这需要使用Unicode字符集。
正则表达式需要返回两组(都忽略该行末尾的空白)
这是我到目前为止尝试过的(.*\b(\w+))\W*$
,但它不适用于单词中的符号。
'this test' => 'this test' and 'test'
' this test ' => 'this test' and 'test'
'this test$' => 'this test$' and 'test$'
'this# test$ ' => 'this# test$' and 'test$'
答案 0 :(得分:2)
对于非正则表达式选项,我们可以尝试在空间上分割输入字符串,然后获取最后一个条目:
string input = "this# test$";
string[] parts = input.Split(null);
string last = parts[parts.Length - 1];
Console.WriteLine(last)
此打印:
test$
如果要使用正则表达式,请尝试按以下模式进行匹配:
\S+$
这将捕获所有紧接在输入结尾之前的连续非空白字符。
答案 1 :(得分:0)
答案 2 :(得分:0)
此Unicode正则表达式将执行您想要的操作:
(\p{L}+\P{L}?\p{Zs}+(\p{L}+\P{L}?))(?<!\p{Zs})
正则表达式详细信息:
\p{L}+
匹配“字母”类别中的一个或多个unicode字符。\P{L}?
匹配一个不属于“字母”类别的可选Unicode字符。\p{Zs}+
匹配一个或多个空格。(?<!\p{Zs})
后面的否定性防止在字符串末尾匹配空格。答案 3 :(得分:0)
这可能有点广泛,但是您可以使用\S
使用2个捕获组,这将匹配一个非空白字符。您可以使用unicode categories进行更新,使其与您要匹配的内容完全匹配,以使其更加具体。
例如,您可以使用字符类[\p{L}\p{N}_!@#$%^&*[\]]
来匹配任何类型的字母/数字字符,并使用\p{L}
和\p{N}
以及允许的特殊字符。>
在第一组中,还捕获了第二组,其中包括中间的空格以获取完全匹配而没有结尾空格。
第二组中捕获最后一个单词。
(\S+\s+(\S+))\s*$
说明
(
捕获组1
\S+\s+
匹配1+个非空白字符,匹配1+个空白字符(\S+)
捕获组1,匹配1个以上非空格字符)
关闭捕获组$
字符串结尾