如何匹配字母和数字组合的单词,但避免只有数字的单词
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... @pconsPO 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”以上是关于如何匹配字母和数字组合的单词,但避免只有数字的单词的主要内容,如果未能解决你的问题,请参考以下文章