簡體   English   中英

正則表達式中的可選字符

[英]Optional characters in a regex

任務非常簡單,但我還沒有找到一個好的解決方案:一個字符串可以包含數字,短划線和加號,或者只包含數字。

^[0-9+-]+$

除了當用戶輸入像“+ - + - +”這樣的垃圾時,我需要做的大部分工作

我沒有幸運的常規前瞻,因為破折號和優勢可能在字符串中的任何位置。

有效字符串:

  1. 234654
  2. 24-3 + -2
  3. -234
  4. 25485+

無效:

  1. ++ - +

這個怎么樣:

([+-]?\d[+-]?)+

這意味着“一個或多個數字,每個數字可以在可選的加號或減號之前或之后”。

這是一個Python測試腳本:

import re
TESTS = "234654 24-3+-2 -234 25485+ ++--+".split()
for test in TESTS:
    print test, ":", re.match(r'([+-]?\d[+-]?)+', test) is not None

打印這個:

234654 : True
24-3+-2 : True
-234 : True
25485+ : True
++--+ : False

怎么樣:

^[0-9+-]*[0-9][0-9+-]*$

這可確保字符串中的某個位置至少有一位數字。 (看起來它可能有很多回溯。但另一方面,它沒有+或*包含在另一個+或*中,我也不喜歡。)

^([+-]*[0-9]+[+-]*)+$

使用斷言后面的肯定的另一個解決方案確保有一個數字。

^[0-9+-]+$(?<=[0-9][+-]*)

或者使用積極的預測斷言。

(?=[+-]*[0-9])^[0-9+-]+

我喜歡

^(?=.*\d)[\d+-]+$ 

解決方案,我自己 它確切地說明了你需要什么,而不需要任何頭部刮傷。

我這樣做:

^[-+]*\d[\d+-]*$

快很好!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM