快速正则表达式检查字符串是不是为金额格式(2x,3x,...)

Posted

技术标签:

【中文标题】快速正则表达式检查字符串是不是为金额格式(2x,3x,...)【英文标题】:Swift Regex to check if String is Amount format (2x, 3x,...)快速正则表达式检查字符串是否为金额格式(2x,3x,...) 【发布时间】:2021-01-15 19:56:28 【问题描述】:

我想检查给定的String 是否为 amount 格式。为了更好地理解,举几个例子:

应该返回true:

2x

31 倍

3x abcd

应该返回false:

2x3

3xabc

asdf3x

所以一般来说:它必须以数字(0-9)开头,可以是更多数字。在数字之后应该紧跟一个“x”/“X”,并且在“x”/“X”之后应该是结尾或空格。

我正在努力完成这项工作。这是我尝试过的:

func isAmountFormat() -> Bool 
    return self.matches("[0-9]+[X,x]")

谁能帮帮我?

【问题讨论】:

您可以添加单词边界\b[0-9]+[Xx]\b @Thefourthbird 给出invalid escape sequence in literal . 那么也许\\b[0-9]+[Xx]\\b 使用捕获组\\b([0-9]+)[Xx]\\b 见regex101.com/r/Y2DNT9/1 使用"(?i)\\b[1-9][0-9]*x\\b"。您能否描述一下“金额格式”的含义以获得答案? 【参考方案1】:

你可以使用

"(?i)\\b[1-9][0-9]*x\\b"

请参阅regex demo。 详情

(?i) - 不区分大小写的标志(以防您无法在当前的正则表达式匹配方法中传递 .caseInsensitive\b - 单词边界 [1-9] - 非零数字 [0-9]* - 任何零个或多个数字 x - Xx \b - 单词边界。

见Swift snippet:

let test = "3x abcd"
if test.range(of: "\\b[1-9][0-9]*x\\b", options: [.regularExpression, .caseInsensitive]) != nil 
    print("Matched")
 else 
   print("No match")

请注意,如果匹配应出现在字符串的开头,您可以使用.anchored 选项编译正则表达式对象,或者将第一个\\b 替换为^

【讨论】:

以上是关于快速正则表达式检查字符串是不是为金额格式(2x,3x,...)的主要内容,如果未能解决你的问题,请参考以下文章

检查行是不是匹配正则表达式

检查字符串是不是为有效 URL 的最佳正则表达式是啥?

如何检查我的字符串是不是与正则表达式匹配 - Swift 3 [重复]

金额正则表达式

如何在 SQL Server 中使用正则表达式检查字符串是不是为数字?

js 正则表达式 要求密码的格式为6-12位,只能是字母、数字和下划线