如何匹配字母和数字组合的单词,但避免只有数字的单词

Posted

技术标签:

【中文标题】如何匹配字母和数字组合的单词,但避免只有数字的单词【英文标题】:How to match words with combination of letters and numbers but avoid words with only numbers 【发布时间】:2015-08-28 15:28:03 【问题描述】:

我需要创建一个正则表达式,它可以从字符串中获取 PO BOX 的完整信息,我认为我需要获取所有其他内容,直到找到完整的数字字符串(邮箱号码没关系,在那之后,只有一个单词是数字和字母的组合才可以匹配,如果整个单词是由数字组成的,那么它应该停在那里,即

来自以下字符串:

"Po Box 321 Stn Commerce Court 123 Sample St"   

我需要在123 Sample St之前拿到所有东西,像这样:

"Po Box 321 Stn Commerce Court "

来自以下字符串:

"PO Box 456 Stn 1st Can Place" 

我需要得到所有东西,因为在邮政信箱号码之后没有仅由数字组成的单词

到目前为止,我实现了第一个案例的工作,但我还没有找到适用于两个字符串的表达式,

我的尝试:

Regex.Match(txtString.Text, @"PO BOX [0-9]+([\s\w][^0-9]*|\s[a-zA-Z0-9]\s)", RegexOptions.IgnoreCase)

谢谢

【问题讨论】:

【参考方案1】:

您可以积极向前看:

PO BOX [0-9]+.*(?= \d+|$)

查看演示https://regex101.com/r/bK7nY2/1

或者使用负面的展望:

PO BOX [0-9]+((?!\d+ ).)*

演示https://regex101.com/r/bK7nY2/3

【讨论】:

谢谢 Kasramvd,我不知道为什么虽然我没有在 C# 中使用你的建议得到相同的结果,但我的代码是这样的: private void button3_Click(object sender, EventArgs e) var match = Regex.Match(txtString.Text, @"PO BOX [0-9]+.*(?= \d+|$)", RegexOptions.IgnoreCase); txtResult.Text = match.Success ? match.Value : @"不匹配"; @pcons 你有什么错误吗?你的输出是什么? 它适用于“PO Box 234 Stn 1st Can Place” - 它检索所有好的东西 - 但是对于字符串“Po Box 442 Stn Commerce Court 199 Bay St”,它也检索所有内容,它不会停在 199... @pcons PO BOX [0-9]+((?!\d+).)* 怎么样? 我得到相反的结果,它只适用于“Po Box 442 Stn Commerce Court 199 Bay St”,仅检索“Po Box 442 Stn Commerce Court 199 Bay St”,但现在它不适用于“PO Box 234 Stn 1st Can Place”,因为它只检索“PO Box 234 Stn”

以上是关于如何匹配字母和数字组合的单词,但避免只有数字的单词的主要内容,如果未能解决你的问题,请参考以下文章

如何从文本中删除所有字母数字单词?

用单词和数字按字母顺序排列字符串

从df.columns单词中的文本中删除非英语单词包含字母和数字

正则表达式(待补充)

带有字母、数字、任意顺序的可选特殊字符的正则表达式单词

0109 标识符