伙计们,我讨厌正则表达式而且我在写作时很糟糕。
我有一个空格分隔的字符串,包含几个我需要提取的代码。每个代码都以大写字母开头并以数字结尾。代码只有两位数。
我正在尝试从初始字符串创建一个字符串数组,但我无法正确获得正则表达式。
这就是我所拥有的
String[] test = Regex.Split(originalText, "([a-zA-Z0-9]{2})");
我也尝试过:
String[] test = Regex.Split(originalText, "([A-Z]{1}[0-9]{1})");
我没有任何Regex经验,因为我尽量避免写它们。
有人有任何建议吗?
示例输入:
AA2410 F7 A4 Y7 B7 A 0715 0836 E0.M80
我需要拿出F7,A4,B7。 E0应该被忽略。
答案 0 :(得分:3)
你想收集结果,而不是分开它们,对吗?
Regex regexObj = new Regex(@"\b[A-Z][0-9]\b");
allMatchResults = regexObj.Matches(subjectString);
应该这样做。 \b
是单词边界,确保只提取整个字符串(如A1
),而不是子字符串(如A1
中的TWA101
)。
如果您还需要在其中排除包含非字字符的“字词”(例如评论中的E0.M80
),则需要定义自己的字边界,例如:
Regex regexObj = new Regex(@"(?<=^|\s)[A-Z][0-9](?=\s|$)");
现在A1
仅在被空格(或字符串开头/结束位置)包围时匹配。
<强>解释强>
(?<= # Assert that we can match the following before the current position:
^ # Start of string
| # or
\s # whitespace.
)
[A-Z] # Match an uppercase ASCII letter
[0-9] # Match an ASCII digit
(?= # Assert that we can match the following after the current position:
\s # Whitespace
| # or
$ # end of string.
)
如果您还需要查找非ASCII字母/数字,可以使用
\p{Lu}\p{N}
而不是[A-Z][0-9]
。这会找到所有大写的Unicode字母和Unicode数字(如Ä٣
),但我想这不是你真正想要的,是吗?
答案 1 :(得分:2)
您的意思是每个代码看起来像“A00”吗?
然后这是正则表达式:
"[A-Z][0-9][0-9]"
非常简单......顺便说一下,在正则表达式中写{1}
是没有意义的。 [0-9]{1}
表示“只匹配一位数,这与写[0-9]
完全相同。
不要放弃,简单的正则表达非常有意义。
答案 2 :(得分:0)
这应该没问题:
String[] all_codes = Regex.Split(originalText, @"\b[A-Z]\d\b");
它为您提供一个数组,其中所有代码都以大写字母开头,后跟一个数字,以一种单词边界(网站空间等)分隔。