快速正则表达式检查字符串是不是为金额格式(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
- X
或 x
\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,...)的主要内容,如果未能解决你的问题,请参考以下文章
如何检查我的字符串是不是与正则表达式匹配 - Swift 3 [重复]