我试图匹配以某个字符串开头的整个字符串,然后匹配任意数量的字符::,除非::匹配,否则仅接受 if 后跟该字符串CASE。
例如:以 开头,后跟Linus::0 个或多个 1 字符的字符串,除非 if ::thenCASE必须跟在 else 后面,仅匹配 之前的所有内容::。
Linus::AOPKNS::CASE将捕获整个字符串
Linus::AOPKNS将捕获整个字符串
Linus::AOPKNS::OK只会捕获Linus::AOPKNS
我想我必须使用积极的前瞻,但考虑到我想匹配 之前的任意数量的字符,我不太确定该怎么做::。
我有一种情况,我需要在VS项目中搜索没有定义MaxLength属性的任何控件.
例如:
<asp:TextBox ID="txtName" runat="server" MaxLength="50" Text="Enter Name" />
<asp:TextBox ID="txtOther" MaxLength="25" runat="server" />
<asp:TextBox ID="MaxLength" runat="server" />
<asp:TextBox ID="txtMisc" runat="server" Width="100" />
Run Code Online (Sandbox Code Playgroud)
有没有人建议使用正则表达式模式来找到没有定义MaxLength的控件?
我对此的第一次尝试,似乎有效,似乎不完美......
<asp:TextBox.*?M(?!axLength=).*?/>
Run Code Online (Sandbox Code Playgroud)
我很想看到更好的解决方案.
注意:Visual Studio搜索在上面的模式中窒息.我被迫使用不同的应用程序来实际使用此模式进行搜索
我想在@字符之前匹配电子邮件地址的本地部分:
LOCAL_RE_NOTQUOTED = """
((
\w # alphanumeric and _
| [!#$%&'*+-/=?^_`{|}~] # special chars, but no dot at beginning
)
(
\w # alphanumeric and _
| [!#$%&'*+-/=?^_`{|}~] # special characters
| ([.](?![.])) # negative lookahead to avoid pairs of dots.
)*)
(?<!\.)(?:@) # no end with dot before @
"""
Run Code Online (Sandbox Code Playgroud)
测试:
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).group()
Run Code Online (Sandbox Code Playgroud)
得到:
'a.a..a@'
Run Code Online (Sandbox Code Playgroud)
为什么@打印在输出中,即使我使用的是非捕获组(?:@)?
测试:
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).groups()
Run Code Online (Sandbox Code Playgroud)
得到:
('a.a..a', 'a', 'a', None)
Run Code Online (Sandbox Code Playgroud)
为什么正则表达式不会拒绝带有一对点的字符串'..'?
为什么这个perl代码输出"True"?
$bar = "\\";
if ($bar =~ /[A-z]/){
print "True";
} else {
print "False";
}
Run Code Online (Sandbox Code Playgroud)
它不应该归还假吗?
我有3列用空格分隔,但第二个字段可选地用双引号括起来.
我想提取第一个字段,第二个字段(双引号内的值)和第三个字段,有时第二个字段值可能不包含在双引号中,在这种情况下只返回现有值.
样本输入
1a "2a 2.1a 2.2a" 3a
4b "5.5b 5.6b 5.7b" 6b
7c 8c 9c
Run Code Online (Sandbox Code Playgroud)
最终输出
匹配信息是
第一行匹配
\1 1a
\2 2a 2.1a 2.2a
\3 3a
Run Code Online (Sandbox Code Playgroud)
第二排比赛
\1 4b
\2 5.5b 5.6b 5.7b
\3 6b
Run Code Online (Sandbox Code Playgroud)
第3排比赛
\1 7c
\2 8c
\3 9c
Run Code Online (Sandbox Code Playgroud)
我尝试了下面的正则表达式,它适用于前两个输入,但第三行不匹配,有人可以帮我解决这个问题吗?
我试过的正则表达式:
([a-z0-9]+)\s+"([a-z0-9\s.]+)"\s+([a-z0-9]+)
Run Code Online (Sandbox Code Playgroud)
链接:
我有一个字符串列表,如
myvar
[1] "VT" "AK" "AL2" "CA24" "NY12"
[6] "AZ6" "WY4"
Run Code Online (Sandbox Code Playgroud)
我想在所有包含3个字符的字符串中的第二个字符后插入字符"0",并在所有包含两个字符的字符串的末尾插入"01",以获得输出
myvar
[1] "VT01" "AK01" "AL02" "CA24" "NY12"
[6] "AZ06" "WY04"
Run Code Online (Sandbox Code Playgroud)
我认为我可以使用正则表达式前瞻和后瞻在一行中做到这一点,但我不能比这更进一步:
sub('(?<=.{2})(?=.{1})', '0', myvar, perl=T)
myvar
[1] "VT" "AK" "AL002" "CA024" "NY012"
[6] "AZ06" "WY04"
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激,
西蒙娜
给定一个虚函数:
public function handle()
{
if (isset($input['data']) {
switch($data) {
...
}
} else {
switch($data) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的目的是获取该函数的内容,问题是匹配花括号的嵌套模式{...}.
我遇到过递归模式,但无法理解与函数体相匹配的正则表达式.
我尝试了以下(没有递归):
$pattern = "/function\shandle\([a-zA-Z0-9_\$\s,]+\)?". // match "function handle(...)"
'[\n\s]?[\t\s]*'. // regardless of the indentation preceding the {
'{([^{}]*)}/'; // find everything within braces.
preg_match($pattern, $contents, $match);
Run Code Online (Sandbox Code Playgroud)
这种模式根本不匹配.我确信这是最后一点是错误的,'{([^{}]*)}/'因为当身体内没有其他支撑时,该模式有效.
将其替换为:
'{([^}]*)}/';
Run Code Online (Sandbox Code Playgroud)
它匹配到语句}中的开关关闭if并停在那里(包括}开关但不包括开关if).
除了这种模式,同样的结果:
'{(\K[^}]*(?=)})/m';
Run Code Online (Sandbox Code Playgroud) 考虑字符串s:
s = ';hello@;earth@;hello@;mars@'
Run Code Online (Sandbox Code Playgroud)
我想要一个pat我得到的模式
re.split(pat, s)
[';hello@', ';earth@', ';hello@', ';mars@']
Run Code Online (Sandbox Code Playgroud)
我希望;并@保留在结果字符串中,但我知道我想在它们之间分开.
我以为我可以使用前瞻和后视:
re.split('(?<=@)(?=;)', s)
Run Code Online (Sandbox Code Playgroud)
但是,它导致了一个错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-392-27c8b02c2477> in <module>()
----> 1 re.split('(?<=@)(?=;)', s)
//anaconda/envs/3.6/lib/python3.6/re.py in split(pattern, string, maxsplit, flags)
210 and the remainder of the string is returned as the final element
211 of the list."""
--> 212 return _compile(pattern, flags).split(string, maxsplit)
213
214 def findall(pattern, string, flags=0):
ValueError: split() requires a non-empty pattern match.
Run Code Online (Sandbox Code Playgroud) 我有以下字符串:
x = "marchTextIWantToDisplayWithSpacesmarch"
Run Code Online (Sandbox Code Playgroud)
我想删除字符串开头的“ march”部分,然后在其余的每个大写字母之前添加一个空格,以产生以下结果:
"Text I Want To Display With Spacesmarch"
Run Code Online (Sandbox Code Playgroud)
要插入whitepace,我使用了gsub("([a-z]?)([A-Z])", "\\1 \\2", x, perl= T)但不知道如何修改模式,以便从返回的字符串中排除第一个“ march”。我正在努力做得更好,因此任何帮助将不胜感激。
如何在字符串的大写字母之前添加下划线(_),但第一个字母除外?
[1] "VarLengthMean" "VarWidthMean"
Run Code Online (Sandbox Code Playgroud)
我希望它成为:
[1] "Var_Length_Mean" "Var_Width_Mean"
Run Code Online (Sandbox Code Playgroud)
我考虑过使用str_replace_allfrom stringr,但是我不知道应该使用哪个正则表达式。
我该如何解决这个问题?