带有字母数字,空格和一个特殊字符的字符串的正则表达式

时间:2016-01-14 10:42:33

标签: regex r

我正在尝试编写一个正则表达式来检测具有以下条件的字符串:

  • 不能为空
  • 需要包含至少1个字母字符。
  • 可以包含(或不包含)空格
  • 可以包含(或不包含)特殊字符' - _

看一下类似的问题,我已经写了这个:

grepl(pattern="(^[[:alpha:][:blank:]]+$)", mylistofstrings) #do not resognize '
grepl("'",data$last_nm ) #I search for ' here

有关如何做的任何想法?我正在使用R.

1 个答案:

答案 0 :(得分:1)

您需要将(您所说的)特殊字符添加到字符类中允许的字符中。最外面的[...]内的任何内容都是您允许的单个字符列表;并且+量词需要一次或多次重复这种单字符模式。

但是,为了满足至少一个字母字符的要求,您可以重构所需字符和可选字符列表中的任何内容,后跟一个字母字符,后跟所需列表中的任何内容或可选字符"允许与一个必需字符相邻的组为空。

grepl(pattern="(^[-'_[:alpha:][:blank:]]*[[:alpha:]][-'_[:alpha:][:blank:]]*$)", mylistofstrings)

字符类中的减号是棘手的,因为它需要是第一个或最后一个(你不能说['-_],因为这意味着任何字符的ASCII码介于'_的ASCII码;它必须是[-'_]['_-]);除此之外,方括号内的顺序是任意的。