我是一个正则表达式新手,我无法弄清楚如何编写一个能够"匹配"任何重复连续单词的正则表达式,例如:
在巴黎的的春天.
并非那是相关的.
你笑什么?是我的我的正则表达式不好?
是否有一个正则表达式将匹配上面的所有粗体字符串?
在R中,是否可以从正则表达式匹配中提取组捕获?据我所知,没有一个grep
,grepl
,regexpr
,gregexpr
,sub
,或gsub
返回组拍摄.
我需要从编码的字符串中提取键值对:
\((.*?) :: (0\.[0-9]+)\)
Run Code Online (Sandbox Code Playgroud)
我总是可以做多个全匹配greps,或做一些外部(非R)处理,但我希望我能在R中完成所有操作.是否有一个功能或包提供这样的功能来执行此操作?
我正在将一个库从Ruby移植到Go,并且刚刚发现Ruby中的正则表达式与Go(谷歌RE2)不兼容.我注意到Ruby和Java(以及其他语言使用PCRE正则表达式(perl兼容,它支持捕获组)),因此我需要重新编写表达式,以便它们在Go中编译好.
例如,我有以下正则表达式:
`(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})`
Run Code Online (Sandbox Code Playgroud)
这应该接受如下输入:
2001-01-20
Run Code Online (Sandbox Code Playgroud)
捕获组允许将年,月和日捕获到变量中.为了获得每个组的价值,这很容易; 您只需使用组名索引返回的匹配数据,然后返回值.所以,例如获得年份,像这样的伪代码:
m=expression.Match("2001-01-20")
year = m["Year"]
Run Code Online (Sandbox Code Playgroud)
这是我在表达式中使用很多的模式,所以我需要做很多重写.
那么,有没有办法在Go regexp中获得这种功能; 我该如何重写这些表达式?
为什么此代码仅吐出整个正则表达式匹配而不是捕获组?
输入
@"A long string containing Name:</td><td>A name here</td> amongst other things"
Run Code Online (Sandbox Code Playgroud)
预期产出
A name here
Run Code Online (Sandbox Code Playgroud)
实际输出
Name:</td><td>A name here</td>
Run Code Online (Sandbox Code Playgroud)
码
NSString *htmlString = @"A long string containing Name:</td><td>A name here</td> amongst other things";
NSRegularExpression *nameExpression = [NSRegularExpression regularExpressionWithPattern:@"Name:</td>.*\">(.*)</td>" options:NSRegularExpressionSearch error:nil];
NSArray *matches = [nameExpression matchesInString:htmlString
options:0
range:NSMakeRange(0, [htmlString length])];
for (NSTextCheckingResult *match in matches) {
NSRange matchRange = [match range];
NSString *matchString = [htmlString substringWithRange:matchRange];
NSLog(@"%@", matchString);
}
Run Code Online (Sandbox Code Playgroud)
代码取自Apple文档.我知道还有其他库可以做到这一点,但我想坚持使用内置的任务.
当我运行此代码时:
print re.search(r'1', '1').groups()
Run Code Online (Sandbox Code Playgroud)
我得到了结果()
.但是,.group(0)
给我一个匹配.
不应该groups()
给我一些包含比赛的东西?
更新:感谢您的回答.因此,这意味着,如果我这样做re.search()
,没有分组,我必须使用groups(0)
获得比赛?
我正在将基于boost的正则表达式转换为C++ 11正则表达式.我有一个名为的捕获组url
:
\s*?=\s*?(("(?<url>.*?)")|('?<url>.*?)'))
Run Code Online (Sandbox Code Playgroud)
有了提升,如果你有一个,smatch
你可以打电话match.str("url")
来获取名称的捕获组.有了std::smatch
,我只看到索引的子匹配.
如何使用std :: smatch类访问url捕获?
(如果你厌倦了介绍,你可以跳到怎么办)
这个问题并不是针对VBScript的(我只是在这种情况下使用它):我想找到一般正则表达式用法的解决方案(包括编辑器).
这开始于我想要创建示例4的改编,其中3个捕获组用于在MS Excel中跨3个单元分割数据.我需要捕获一个完整的模式,然后在其中捕获3个其他模式.然而,在同一个表达式中,我还需要捕获另一种模式并再次捕获其中的3种其他模式(是的,我知道......但在指向nutjob手指之前,请完成阅读).
我首先考虑了命名捕获组,然后我意识到我不应该"混合命名和编号的捕获组",因为它不推荐«因为风格与组的编号方式不一致».
然后我查看了VBScript SubMatches和«non- capture »组,我得到了针对特定案例的工作解决方案:
For Each C In Myrange
strPattern = "(?:^([0-9]+);([0-9]+);([0-9]+)$|^.*:([0-9]+)\s.*:([0-9]+).*:([a-zA-Z0-9]+)$)"
If strPattern <> "" Then
strInput = C.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
Set rgxMatches = regEx.Execute(strInput)
For Each mtx In rgxMatches
If mtx.SubMatches(0) <> "" Then
C.Offset(0, 1) = mtx.SubMatches(0)
C.Offset(0, 2) = …
Run Code Online (Sandbox Code Playgroud) 我试图找出如何comma-separated
在以下url字符串中的值上重复捕获组:
id=1,2;name=user1,user2,user3;city=Oakland,San Francisco,Seattle;zip=94553,94523;
我正在使用这RegExp
是我想要的返回结果,除了值,因为它们是动态的,即.可能是url参数中的2,3,4等用户,并且想知道我是否可以为每个值而不是一个捕获组创建user1,user2,user3
捕获组.
正则表达式: (^|;|:)(\w+)=([^;]+)*
这是使用RegExp在线的现场演示
示例输出:
等...基于我之前解释过的动态值.
问题:我的表达式错误我正在使用*
循环来重复模式?
当我使用vim时,我经常使用&
反向替换整个匹配.例如,以下内容将"foo"的所有实例替换为"foobar":
%s/foo/&bar/g
Run Code Online (Sandbox Code Playgroud)
这里的好处是懒惰:我不必在匹配中键入括号,我只需要为替换中的反向引用键入一个字符而不是两个字符.也许更重要的是,在我输入比赛时,我没有弄清楚我的背叛,减少了认知负担.
是否有一个等同于&
我在R的正则表达式中使用vim(可能使用perl = T
参数)?
我有一个带有捕获组的正则表达式,它在更广泛的上下文中匹配我想要的.然后,我将捕获组$1
用于满足我的需求.这很简单.
但是,s///
当我只想用替代品替换内容而$1
不是整个正则表达式时,如何使用捕获组?
谢谢!
-F
capture-group ×10
regex ×10
match ×2
r ×2
c++11 ×1
capture ×1
duplicates ×1
go ×1
ios ×1
javascript ×1
object ×1
objective-c ×1
perl ×1
python ×1
replace ×1
substring ×1