保留字符串中的分隔标记列表[关闭]
Posted
技术标签:
【中文标题】保留字符串中的分隔标记列表[关闭]【英文标题】:Keep list of separated marks from string [closed] 【发布时间】:2019-08-30 05:25:21 【问题描述】:我正在尝试使用linq
和regex
方法来删除所有字母和数字字符并仅保留字符串中的标点符号:
string input = ": hello; world; 2019>how?.are,you. .i'm goodand-you[?ok";
在输出列表中为每个标记在同一字符串中不被字符或数字分割:
:
;
;
>
?.
,
..
'
-
[?
任何指南或示例都会有所帮助
【问题讨论】:
【参考方案1】:我猜你可以使用下面的
给定
string input = ": hello; world; 2019>how?.are,you. .i'm goodand-you[?ok";
选项 1
var results = Regex.Replace(input, @"[\w]", Environment.NewLine)
.Split(new[] Environment.NewLine , StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Replace(" ", ""));
选项 2
var results2 = Regex.Matches(input, @"[\pP ]*")
.OfType<Match>()
.Where(x => !string.IsNullOrWhiteSpace(x.Value))
.Select(x => x.Value.Replace(" ", ""));
输出
:
;
;
>
?.
,
.
.
'
-
[?
Full Demo here
注意:在一个模式中可能有更好的方法来做到这一点
【讨论】:
您好,这两种方法的工作原理与描述的完全一样,只有一个例外,将点. .
除以空格,除了 ..
将两者都放在一个字符串中
选项 2 100% 回答了我的问题。选项 1 .Select(x => x.Value.Replace(" ", ""));
不可调用的成员 'Select' 不能像方法一样使用。
@sam324 固定选项一
您是否尝试过使用选项 1,因为它仍然显示相同的不可调用成员,必须再次检查
是的,两种方法都给出了正确的结果,选项 2 根据我的问题和所需的输出给出了正确的结果【参考方案2】:
使用 Linq,您可以使用与 this response on how to strip punctuation from a string 非常相似的东西,您可以使用:
var result = input.Where(p => char.IsPunctuation(p)).ToArray();
【讨论】:
您好,如果我想为每个单独的标记保留和分割标记,但对于单个字符串的数字或字符之间不存在多个标记,效果很好以上是关于保留字符串中的分隔标记列表[关闭]的主要内容,如果未能解决你的问题,请参考以下文章