如何编写正则表达式模式来获取匹配的字符串?

Posted

技术标签:

【中文标题】如何编写正则表达式模式来获取匹配的字符串?【英文标题】:How to write the regex pattern to get the matched string? 【发布时间】:2016-12-01 17:08:27 【问题描述】:

正在努力为以下字符串编写正则表达式模式。我使用以下模式来获取匹配的字符串。但是,我得到了错误。

注意:输入字符串可以是以下输入字符串中的任何一个。

string input = "IN-7874 - hello";
// or "IN-7874 - Hello"
// "IN-7874 - 1) hello"
// "IN-7874 - 1. hello"
// "IN-7874 - 1)hello"
// "IN-7874 - 1.hello"
string pattern = @"^[A-Z]+\\-^[0-9]\s+\\-\\s+^[A-Z]"; //[any number of capital letters]hyphen[any number of numbers(0-9)]space[hyphen]space[numbers or strings]
var a = Regex.Match(input, pattern);

有人可以帮我解决这个问题吗?

我的输出应该是[任意数量的大写字母]连字符[任意数量的数字(0-9)]空格[连字符]空格

示例:SAM-123 - // 不考虑大括号。

【问题讨论】:

您的 input var 代码已损坏,如果这些是文字引号,请转义其中的引号。此外,您必须在模式的开头想要 1 ^,其他的应该被删除。试试^[A-Z]+-[0-9]+\s+-\s+[A-Za-z]+。或^[A-Z]+-[0-9]+\s+-\s+(?:\d+[.)]\s*)?[A-Za-z]+ @Wiktor Stribiżew。谢谢你。有效。将此标记为答案。 最后一个,对吧? @Wiktor Stribiżew 是的。最后一个有效。 【参考方案1】:

你可以使用

^[A-Z]+-[0-9]+\s+-\s+(?:[0-9]+[.)]\s*)?[A-Za-z]+

见regex demo

解释

^ - 字符串开头 [A-Z]+ - 1 个或多个大写 ASCII 字母 - - 一个连字符 [0-9]+ - 1 位或多位数字 \s+ - 1+ 个空格 - - 一个连字符 \s+ - 见上文 (?:[0-9]+[.)]\s*)? - 可选序列: [0-9]+ - 1 位以上 [.)] - 文字 .) \s* - 0+ 个空格 [A-Za-z]+ - 1 个或多个 ASCII 字母

【讨论】:

注意我使用[0-9]而不是\d,因为in .NET, \d may match more than just 0 to 9 digits。 非常感谢。清晰的解释,完美的解决方案。

以上是关于如何编写正则表达式模式来获取匹配的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写正则表达式模式以匹配字符串结尾或字符串开头的货币符号

正则表达式 - 如何匹配除特定模式之外的所有内容

简化正则表达式 OR 模式

如何编写 C# 正则表达式模式以匹配基本的 printf 格式字符串,如“%5.2f”?

Python基础篇:认知正则表达式

Python基础篇:认知正则表达式