R:删除字符串中分隔符后的所有字母字符

时间:2017-10-16 18:25:03

标签: r

我想在字符串中删除分隔符后面的所有字母([a-z])(例如" - "),例如:

s <- "abc-10abc"

所以得到:

> s2
[1] "abc-10"

我该怎么做?谢谢

2 个答案:

答案 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"

说明:

  1. ^ - 字符串的开头
  2. ^.*字符串开头的任何字符,后跟零次或多次重复。
  3. -与您问题中的分隔符匹配
  4. [^[:alpha:]]* circunflex否定了课程[:alpha:],不匹配字母字符
  5. (all of above)形成一个模式组,第一个(也是唯一的)
  6. [[:alpha:]]*匹配字母字符,然后重复零次或多次
  7. 然后在replacement参数中\\1表示将模式替换为第一组,因此[[:alpha:]]*部分被省略。