我正在测试命名约定,但我无法让正则表达式足够精确。有没有办法限制下划线的数量,我们有一定数量的字段由下划线划分,但其中一些是我需要允许通过的自由文本字段。在这里,我只想检查字段的结构。
nameP <- as.character("SX_anything_SX") # correct: i.e. 1
nameP <- as.character("SX_anything__SX") # correct: i.e. 1 but should be incorrect
nameP <- as.character("SX_anything_SXS") # error on end: i.e. 0
nameP <- as.character("SXS_anything_SX") # error on start: i.e. 0
placement_regxpr <- '^[A-Z]{2}_.*_[A-Z]{2}$'
isMatch <- grep(pattern = placement_regxpr,x = nameP, ignore.case = TRUE)
isMatch
您可以使用
placement_regxpr <- '^[A-Z]{2}_[^_]*_[A-Z]{2}$'
查看正则表达式演示
正则表达式将仅匹配:
-
^
- 字符串的开头 -
[A-Z]{2}
- 两个 ASCII 字母(由于使用了ignore.case = TRUE
,因此此字符类/括号表达式将匹配小写和大写字母( -
_
- 下划线 -
[^_]*
- 除_
以外的 0 个或多个字符 -
_
- 下划线 -
[A-Z]{2}
- 两个 ASCII 字母 -
$
- 字符串的结尾。