R 正则表达式:如何限制。*仅限于数字&;标点符号

R 正则表达式:如何限制。*仅限于数字&;标点符号,r,regex,R,Regex,我正在尝试创建语句,在其中我可以使用带条件的*(例如,没有consequestive两个字母),但我已经失败了一段时间。从这里开始: "SOMETEXT 1-7, 39-41, 12B, 1-7, SOME OTHER TEXT, SOME MORE OTHER TEXT" 我想找到: "SOMETEXT 1-7, 39-41, 12B, 1-7," 我已经做到了可以查找后跟数字和任何逗号的文本的程度: ^[A-Z]+[A-Z] [1-9].*, 在

我正在尝试创建语句,在其中我可以使用带条件的
*
(例如,没有consequestive两个字母),但我已经失败了一段时间。从这里开始:

"SOMETEXT 1-7, 39-41, 12B, 1-7, SOME OTHER TEXT, SOME MORE OTHER TEXT"
我想找到:

"SOMETEXT 1-7, 39-41, 12B, 1-7,"
我已经做到了可以查找后跟数字和任何逗号的文本的程度:

^[A-Z]+[A-Z] [1-9].*,
在此处使用正则表达式生成器:

但在这里我仍然得到:

"SOMETEXT 1-7, 39-41, 12B, 1-7, SOME OTHER TEXT,"
我如何告诉。*当它发现两个consequentive字母时停止?还是逗号、空格和字母?任何情况都可以。我只想在
*
之前找到的数字(包括“数字”如12B)和标点符号之后再查找

我使用R,但我认为这个问题是关于正则表达式的一般问题。

您可以使用

^[A-Z]+[A-Z] [1-9].*?(?=,\s*[A-Z]{2})
看。您可以将其用作
stringr::stru extract(x,“^[A-Z]+[A-Z][1-9].*(?=,\\s*[A-Z]{2})”)

详细信息

  • ^
    -字符串的开头
  • [A-Z]+[A-Z]
    -两个或多个大写字母(
    [A-Z]{2,}
  • [1-9]
    -从
    1
    9
  • *?
    -任何零个或多个字符(换行字符除外),尽可能少
  • (?=,\s*[A-Z]{2})
    -一个正向前瞻,需要
    ,零个或多个空格,然后在当前位置的右侧立即显示两个大写ASCII字母
但在base R中,您可以使用

^[A-Z]+[A-Z] [1-9].*?(?=,\s*[A-Z]{2})
sub(“^([A-Z]+[A-Z][1-9].*?,\\s*[A-Z]{2}.*”,“\\1”,x,perl=TRUE)

请参阅。

尝试以下操作:
^[A-Z]+[A-Z].[1-9],
正则表达式问题应始终使用适当的语言进行标记,因为正则表达式在不同语言/库中的实现方式不同。@anubhava谢谢!这在本例中有效,但我仍然接受了下面的答案,因为它更一般(例如,如果出于某些数据原因,数字和逗号之间有空格,它仍然有效)太棒了,感谢您提供的详细信息,这非常有帮助!仅仅为了完整性,没有办法反过来,而不是寻找这两个字母,限制。*只寻找数字和标点符号,对吗?@Jakob用
[\p{N}\p{p}\p{S}]*
[:punct:[:digit:][:digit:]*