我必须分析日志文件,并且正在寻找重复的模式,例如我想找到:
Start ...
some lines ...
Start ...
Run Code Online (Sandbox Code Playgroud)
所以为此我正在使用
/Start\_.\{-}Start
Run Code Online (Sandbox Code Playgroud)
但不幸的是还发现了这个,我想避免:
Start ...
End ...
Start ...
Run Code Online (Sandbox Code Playgroud) 我有这段代码可以在第二个空间上拆分列,但我不知道如何修改它以仅在第一个空间上拆分。我对正则表达式不太熟悉。
library(tidyr)
df <- data.frame(Location = c("San Jose CA", "Fremont CA", "Santa Clara CA"))
separate(df, Location, into = c("city", "state"), sep = " (?=[^ ]+$)")
# city state
# 1 San Jose CA
# 2 Fremont CA
# 3 Santa Clara CA
Run Code Online (Sandbox Code Playgroud) 嘿伙计们,我想询问你是否可以使用lookahead或任何其他机制对单个正则表达式进行一些条件检查.
例如,在我的正则表达式中,如果前一个值超过3,则我希望下一个值的范围为0-5,如果前一个值低于3,则范围为0-9.
例如:
[0-9]下一场比赛应为[0-5]或[0-9],具体取决于之前的值是低于还是高于5.
正如代码所想的那样:
调用此A - > [0-9] [0-9] < - 调用此B
if(A <5)则B [0-9] Else B [0-5]
这可能是一个正则表达式吗?
我有一个处理许多空格分隔字符串的操作,我正在寻找一个字符串匹配函数的正则表达式,如果前两个字符串在第一个空格以大写字母开头之前将触发传递,如果不是,则返回false.
例子:
"AL_RIT_121 PA_YT_32 rit cell 22 pulse"
Run Code Online (Sandbox Code Playgroud)
将返回true,因为前两个字符串AL_RIT_121,并PA_YT_32用大写字母开头A,并P分别
"AL_RIT_252 pa_YT_21 mal cell reg 32 1 ri"
Run Code Online (Sandbox Code Playgroud)
将以p小写形式返回false .
我一直在努力寻找解决这个问题的方法.假设有一个字符串
"hello Exclude1 4:32 test test Exclude2 5:23 hello 2:19 some more text 42:3 more text"
Run Code Online (Sandbox Code Playgroud)
我试图创建一个C#至REGx将只匹配2:19和42:3
而忽视Exclude1 4:32和Exclude2 5:23
即如果前面有Exclude1或Exclude2,则不匹配4:32或n:nn.谢谢
所以我需要返回修改后的String,它在跳过注释时用另一个标记替换标记的第一个实例.这是我正在谈论的一个例子:
This whole quote is one big String
-- I don't want to replace this @@
But I want to replace this @@!
Run Code Online (Sandbox Code Playgroud)
作为一名前.NET开发人员,我认为这很容易.我只是像这样做一个负面的观察:
(?<!--.*)@@
Run Code Online (Sandbox Code Playgroud)
但后来我学会了Java无法做到这一点.所以在得知花括号没问题后,我尝试了这个:
(?<!--.{0,9001})@@
Run Code Online (Sandbox Code Playgroud)
这并没有引发异常,但它确实与评论中的@@相匹配.
当我用Java正则表达式测试器测试这个正则表达式时,它按预期工作.关于我唯一能想到的是我使用的是Java 1.5.Java 1.5是否有可能在其正则表达式引擎中出现错误?假设它确实如此,我如何让Java 1.5做我想做的事情而不分解我的字符串并重新组装它?
编辑我将#更改为 - 运算符,因为看起来正则表达式会更复杂,有两个字符而不是一个字符.我最初没有透露我正在修改一个查询,以避免关于"那么你不应该那样修改查询!"的主题讨论.我有一个很好的理由这样做.请不要讨论查询修改的良好做法.谢谢
我目前有两个独立的正则表达式模式来查找目标字+下一个字和目标字+前一个字:
string text = "Here is a test MYWORD statement for MYWORD regex";
string pattern = "(\\bMYWORD\\s)(\\w+)"; //MYWORD statement; MYWORD regex
string pattern = "(\\w+)(\\s\\bMYWORD)"; //test MYWORD; for MYWORD
Run Code Online (Sandbox Code Playgroud)
正则表达式是否提供了一种优雅的方法来将上面的两种模式组合起来用于单个调用?
谢谢
编辑:非常感谢m.buettner和Qtax的精彩解释和示例 - 非常有用!
我已经尝试了一些提供的示例,并且这些在所需的上下文中匹配'MYWORD',但也许我还不够清楚:我试图返回上面评论的所有短语,即:
匹配(模式)应返回以下所有字符串:
'MYWORD statement'
'MYWORD regex'
'test MYWORD'
'for MYWORD'
Run Code Online (Sandbox Code Playgroud)
抱歉,如果我的原始问题没有解释得那么好!
我已经编写了以下代码来匹配我的属性文件中的服务名称:
service = properties.match(/^com\.google\.([#{serviceName}]+)\.public$/)
Run Code Online (Sandbox Code Playgroud)
此代码工作正常,当我给任何serviceName但却未能如果serviceName有一个-在之间
例如- common-api
错误:
empty range in char class: /^com\.google\.([common-api]+)\.public$/ (SyntaxError)
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能逃脱正则表达式评估中的整个字符串?
String to be matched = "AAA/up to eight upper case letters/AAA" :
ex1 : AAA/BB/AAA
ex2 : AAA//AAA
ex3: AAA/BBCCDDEEFF/AAA
如何在中间匹配字符串为0到8个大写字母(即正斜杠之间)?
我试过了 regex : AAA/(?!(.*[a-z].*)[A-Z]{0,8})/AAA
但它与上述任何字符串都不匹配.
(正则表达式AAA/[A-Z]{0,8}/AAA匹配上面的字符串,但它也匹配小写字母.
ex: AAA/bb/AAA)
我有一堆这样的文件
/foo/bar/specs/d.js
/foo/bar/spec/d.js
/foo/bar/specs/v.js
/foo/bar/specs/v.js
/node_modules/bar/specs/v.js
Run Code Online (Sandbox Code Playgroud)
我需要一个正则表达式,它将排除node_modules下的所有内容
像这样:
(?!node_modules)\/.*\/specs\/.*\.js
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用
感谢你的帮助。
regex ×10
c# ×2
java ×2
regex-greedy ×2
boost-regex ×1
javascript ×1
notepad++ ×1
r ×1
ruby ×1
string ×1
vim ×1