[英]Regex to match all words not starting with digit
很抱歉提出这个笨拙的问题,但是我对regex不太热衷。 我有几个这样的观点:
text1.2text: text3,,text4 5. text6=== t7@ text8. T, 9-- T10
text1.2text: text3,,text4 5. text6=== t7@ text8. T, 9-- T10
,我想使用scanner
返回:
a)单个字符, b)包含字符和数字但以字符开头的单词。
其他任何内容都可以视为分隔符。
因此,在以上观点中,这些应返回:
text1
text3
text4
text6
t7
text8
T
T10
我可以在扫描仪中使用多个定界符,例如"\\\\.|\\\\:|\\\\,|\\\\,,"
等,但这可能是我要提取的单词之间的任何东西,但我认为这不是一个很好的方法无论如何都要做。
我是否可以使用正则表达式作为定界符,或者在scanner.hasNext("regex")
中提取这些单词?
提前致谢
我不确定这是否是您的意思,但似乎您想将以下部分用作分隔符:
text1.2text: text3,,text4 5. text6=== t7@ text8. T, 9-- T10
^^^^^^^^^ ^^ ^^^^ ^^^^ ^^ ^^ ^^^^^^
这意味着您想将此字符串拆分为每个非字母数字字符(以及以数字开头的可选单词)。 如果是这种情况,您可以将扫描仪设置为使用定界符,例如
"([^\\w]+(\\d\\w*)*)+"
[^\\\\w]+
一个或多个非字母数字字符 (\\\\d\\\\w*)*
,后接零个或多个以数字开头的单词 ([^\\\\w]+(\\\\d\\\\w*)*)+
分隔符可以重复多次(这样,我们将避免在分隔符之间返回空字符串) 并简单地遍历next
元素。
演示:
String text = "text1.2text: text3,,text4 5. text6=== t7@ text8. T, 9-- T10";
Scanner sc = new Scanner(text);
sc.useDelimiter("([^\\w]+(\\d\\w*)*)+");
while(sc.hasNext())
System.out.println(sc.next());
输出:
text1
text3
text4
text6
t7
text8
T
T10
如果您需要匹配整个字符串,请尝试以下操作:
/^(\b[a-z][a-z0-9]*)$/ig
测试:
tag1 // match
tag tag2 // no match
1tag // no match
@tag // no match
tag@ // no match
UPPERtag // match
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.