Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex R正则表达式提取相似的单词,但其中一个有连字符_Regex_R_Stringr - Fatal编程技术网

Regex R正则表达式提取相似的单词,但其中一个有连字符

Regex R正则表达式提取相似的单词,但其中一个有连字符,regex,r,stringr,Regex,R,Stringr,我有以下数据框: species size_description 1 "some text Small some text" 2 "some text small-med some text" 3 "some text Med. some text" 4 "some text medium some text" 5 "some text med-large some text" 6

我有以下数据框:

species    size_description
1          "some text Small some text"
2          "some text small-med some text"
3          "some text Med. some text"
4          "some text medium some text"
5          "some text med-large some text"
6          "some text large some text"
我想编写一个正则表达式,用于捕获“大小描述”字段中的大小,因此如下所示:

species    size_description                    newSize                            
1          "some text Small some text"         "Small"
2          "some text small-med some text"     "small-med"
3          "some text Med. some text"          "Med."
4          "some text medium some text"        "medium"
5          "some text med-large some text"     "med-large"
6          "some text large some text"         "large"
我试着这样做:

size_regex = paste(
                "[Ss]{1}mall",
                "[Mm]{1}ed\\.*i*u*m*",
                "[Mm]{1}ed\\.*i*u*m*-*\\s*[Ll]{1}arge",       #doesnt work
                "[Ss]{1}mall-*\\s*[Mm]{1}ed\\.*i*u*m*",       #doesnt work
                "[Ll]{1}arge",
                sep = "|"
                )

df$newSize = str_extract(df$size_description, age_regex)
但是,它无法区分带有连字符的字符。例如,对于物种2,它将其记录为“小”而不是“小地中海”

我如何编写一个正则表达式来在R中实现这一点?我更喜欢stringr包,但任何东西都可以


请注意,我在正则表达式中保留完整单词选项的原因是某些描述使用完整单词。例如,一些可能是“small-medium”,而另一些只是“small-med”。

我认为这个正则表达式可以满足您提到的条件

(\S*(?:[Ss]mall|[Ll]arge|[Mm]edium|Med[.])\S*)

尺寸总是第三个词吗?不,它可以在字符串中的任何位置。您考虑的可能的
尺寸
元素是什么?我在newSize字段中列出了它们,这些都是可能的尺寸好吗?是的,看起来不错。就我所知,你能解释一下正则表达式是如何提取连字符的吗?比如说,如果我只想为“small med”单独设置一个正则表达式,我该怎么做呢?@OliverRoliver实际上,我想做的是找到单词
small
Large
Medium
med.
,然后选择前面(和后面)的任何单词以上提到的这些词,并不是spaces@OliverOliver对于
small-med
,您可以直接使用它,好的,我知道您在做什么。谢谢。@OliverRoliver很乐意帮忙