【问题标题】:Regex with comma delimited string seperated by pipe sign in .NET带有逗号分隔字符串的正则表达式,由.NET中的管道符号分隔
【发布时间】:2020-10-06 17:20:05
【问题描述】:

我正在尝试获取以下格式的正则表达式。它需要一个“名称”,任何字符,除了空白或什么都没有。始终是管道符号,然后是逗号分隔的项目列表,可以是任何字符。逗号后面不能有空格 (, )。

Name|Item1,Item2,Item3

以下是我到目前为止的内容,基本上每次都匹配。

(.*)|([.*]+(,[\S]+)*)+

无效

Name|
Name
   |Item1,Item2
|Item1,Item2
Name|Item1, Item2
|

【问题讨论】:

    标签: .net regex


    【解决方案1】:

    你可以使用

    ^[^|\s]+\|[^,|\s]+(?:,[^,|\s]+)*$
    

    regex demo

    详情

    • ^ - 字符串开头
    • [^|\s]+ - 除了| 和空格之外的一个或多个字符
    • \| - 一个 | 字符
    • [^,|\s]+ - 除了,| 和空格之外的一个或多个字符
    • (?:,[^,|\s]+)* - 零个或多个逗号重复,然后是除,| 和空格之外的一个或多个字符
    • $ - 字符串结束。

    【讨论】:

    • @MikeFlynn 不,然后使用^[^|]+\|[^,|\s]+(?:,[^,|\s]+)*$
    • 逗号分隔的列表可以在逗号之间有空格吗?只是不在开始或结束。
    • @MikeFlynn 是的,^[^|]+\|[^,|\s]+(?:\s*,\s*[^,|\s]+)*$
    • 这不匹配了,Name|test test,test(whitespace)|test,testName|test, test
    • @MikeFlynn 我误解了你的意图。我想你需要^[^|]+\|[^,|]+(?:,[^,|]+)*$
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多