保留字符串中的分隔标记列表[关闭]

Posted

技术标签:

【中文标题】保留字符串中的分隔标记列表[关闭]【英文标题】:Keep list of separated marks from string [closed] 【发布时间】:2019-08-30 05:25:21 【问题描述】:

我正在尝试使用linqregex 方法来删​​除所有字母和数字字符并仅保留字符串中的标点符号:

   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 =&gt; 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();

【讨论】:

您好,如果我想为每个单独的标记保留和分割标记,但对于单个字符串的数字或字符之间不存在多个标记,效果很好

以上是关于保留字符串中的分隔标记列表[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串和整数分隔到列表中[关闭]

Python RE库字符串拆分,但将分隔符/分隔符保留为下一个字符串的一部分

从列表中的对象中删除字节顺序标记

Python:按分隔符列表拆分字符串

使用分隔符搜索 varchar 列中的每个标记 [关闭]

替换字符串中的 html 标记,但保留文本并用自定义标记重新换行