我想在字符串中删除分隔符后面的所有字母([a-z])(例如" - "),例如:
s <- "abc-10abc"
所以得到:
> s2
[1] "abc-10"
我该怎么做?谢谢
答案 0 :(得分:3)
public function __construct() {
if ( defined( 'PLUGIN_NAME_VERSION' ) ) {
$this->version = PLUGIN_NAME_VERSION;
} else {
$this->version = '1.0.0';
}
$this->plugin_name = 'MyPlugin';
if(!empty(get_option($this->plugin_name))){
$this->clientID = get_option($this->plugin_name)['client_id'];
}
$this->load_dependencies();
$this->set_locale();
$this->define_admin_hooks();
$this->define_public_hooks();
$this->define_shortcodes();
}
第一个模式参数使用gsub("(.*\\d).*", "\\1", s)
来“捕获”一组字符。在捕获内部,我们正在寻找所有外卡字符,直到数字()
。这会“捕获”所有内容,直到最后一位数字。
由于pattern参数还包含捕获组之后的多通配符,因此整个原始字符串将被替换为目标。 replace参数\\d
表示使用模式参数中的第一个(在这种情况下仅使用)捕获表达式。
如果不清楚,请告诉我,这是我的正则表达式对R正则表达式的帮助https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
就像Rich Scriven指出的那样,您可以用\\1
替换.*
来定位最后一位数字后面的字母。您可能希望将参数[a-z]*
添加到ignore.case = TRUE
以及不是一切都是小写:
gsub()
答案 1 :(得分:0)
我不是正则表达式专家,但我相信这符合你的模式。
gsub("(^.*-[^[:alpha:]]*)[[:alpha:]]*", "\\1", s)
#[1] "abc-10"
说明:
^
- 字符串的开头^.*
字符串开头的任何字符,后跟零次或多次重复。-
与您问题中的分隔符匹配[^[:alpha:]]*
circunflex否定了课程[:alpha:]
,不匹配字母字符(all of above)
形成一个模式组,第一个(也是唯一的)[[:alpha:]]*
匹配字母字符,然后重复零次或多次然后在replacement
参数中\\1
表示将模式替换为第一组,因此[[:alpha:]]*
部分被省略。