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字母,
^[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:]*