正则表达式匹配所有字符,如果有的话

时间:2016-02-25 02:03:53

标签: regex

我试图弄清楚如何编写一个匹配每个章程的正则表达式,但不包括字符序列中的第一个数字(如果有的话)。

例如:

输入:abc123

输出:abc

输入:#$%@#<> @< 123

输出:#$%@#<> @<

输入:abc

输出:abc

输入:abc @#@#@ - 122

输出:abc @#@#@ -

4 个答案:

答案 0 :(得分:0)

[更新] 试试这个正则表达式:

([^0-9\n]+)[0-9]?.*

Regex解释道:

(           capturing group starts
[^0-9\n]    match a single character other than numbers and new line
+           match one or more times
)           capturing group ends
[0-9]       match a single digit number (0-9)
?           match zero or more times
.*          if any, match all other than new line

感谢@Robbie Averill澄清OP的要求。 Here is the demo.

答案 1 :(得分:0)

您可以使用:

/^([^\d\n]+)\d*.*$/gm

这也将处理字符串中有多组数字的情况。 Example here.

说明:

^          # define the start of the stirng
(          # open capture group
  [^\d\n]+ # match anything that isn't a digit or a newline that occurs once or more
)          # close capture group
\d*        # zero or more digits
.*         # anything zero or more times
$          # define the end of the string

g # global
m # multi line

贪婪匹配意味着默认情况下,您将匹配捕获组,并在捕获组或其遇到的字符串末尾匹配的数字或任何内容时立即停止捕获。

答案 2 :(得分:0)

我没有选择正确答案,因为评论中留下了正确答案。 " ^ \ d +"

我在java工作,所以把它放在一起我得到了:

Pattern p = Pattern.compile("^\\D+");
Matcher m = p.matcher("Testing123Testing");
String extracted = m.group(1);

答案 3 :(得分:-1)

使用字符类功能:[...]

识别数字:[0-9]

取消课程:[^ 0-9]

允许尽可能多的人:[^ 0-9] *