可能重复:
可以使用正则表达式来匹配嵌套模式吗?
我正在编写一个regexp来检查输入字符串是否是正确的算术表达式.问题是检查是否有足够的开括号和右括号.
表达式:
(1)
(((1)
((1))))
我认为前瞻和后视在这里很有用但是现在我只能检查一种.我正在使用Java,如果重要的话.
我需要在字符串中用字符(比如说)P替换字符(比如说)x,但前提是它包含在带引号的子字符串中.一个例子使它更清楚:
axbx'cxdxe'fxgh'ixj'k -> axbx'cPdPe'fxgh'iPj'k
Run Code Online (Sandbox Code Playgroud)
为简单起见,我们假设引号总是成对出现.
显而易见的方法是一次只处理一个字符串(简单的状态机方法);
但是,我想知道是否可以使用正则表达式一次完成所有处理.
我的目标语言是C#,但我想我的问题与任何具有内置或支持正则表达式的语言有关.
我需要匹配以下整个语句:
{{CalendarCustom|year={{{year|{{#time:Y}}}}}|month=08|float=right}}
Run Code Online (Sandbox Code Playgroud)
基本上每当有原始标签内部{需要有相应数量的}嵌入时{ }.所以例如{{match}}或者{{ma{{tch}}}}或{{m{{a{{t}}c}}h}}.
我现在有这个:
(\{\{.+?(:?\}\}[^\{]+?\}\}))
Run Code Online (Sandbox Code Playgroud)
这不太奏效.
我试图使用这个正则表达式从字符串中删除方括号(及其中的所有内容)的所有实例.例如,当字符串中只有一对方括号时,这种方法有效:
import re
pattern = r'\[[^()]*\]'
s = """Issachar is a rawboned[a] donkey lying down among the sheep pens."""
t = re.sub(pattern, '', s)
print t
Run Code Online (Sandbox Code Playgroud)
我得到的是正确的:
>>>Issachar is a rawboned donkey lying down among the sheep pens.
Run Code Online (Sandbox Code Playgroud)
但是,如果我的字符串包含多个方括号,则它不起作用.例如:
s = """Issachar is a rawboned[a] donkey lying down among the sheep pens.[b]"""
Run Code Online (Sandbox Code Playgroud)
我明白了:
>>>Issachar is a rawboned
Run Code Online (Sandbox Code Playgroud)
无论字符串中有多少个方括号,我都需要使用正则表达式.正确的答案应该是:
>>>Issachar is a rawboned donkey lying down among the sheep pens.
Run Code Online (Sandbox Code Playgroud)
我研究并尝试了许多排列无济于事.
有没有一种方法可以像这样从 Git diff 中消除版本号更改噪音?具体来说,如果一行仅包含从一个数字到另一个数字的更改,我可以设置 Git diff 来忽略它吗?
可能重复:
可以使用正则表达式来匹配嵌套模式吗?
如何使用正则表达式搜索其中包含任意数量嵌套括号的一对开始和结束括号,例如
(...(...(...(...) ...) ...) ...)
Run Code Online (Sandbox Code Playgroud)
每个开口支架必须与一个闭合支架相匹配.并且嵌套的开 - 关对的数量是任意的.其他字母数字字符可能出现在括号内.
我是一个完整的非程序员,正在学习使用Ruby和Rails框架编程.
我目前正在使用Ruby 1.8.7和Rails 3.0.3,但我想知道是否应该升级到Ruby 1.9,因为升级时我没有任何"遗留"成本.
有什么缺点?我是否会遇到与普通宝石的兼容性问题,甚至是我甚至无法预料的其他问题?
我正在使用python正则表达式模块,re.
我需要在这两个短语中匹配'('')'内的任何内容,但"不那么贪心".像这样:
show the (name) of the (person)
calc the sqrt of (+ (* (2 4) 3))
Run Code Online (Sandbox Code Playgroud)
结果应该从短语1返回:
name
person
Run Code Online (Sandbox Code Playgroud)
结果应该从短语2返回:
+ (* (2 4) 3)
Run Code Online (Sandbox Code Playgroud)
问题是,为了适应第一个短语,我使用了 '\(.*?\)'
在第二个短语中,这恰好适合 + (* (2 4)
并使用'\(.*\)'正确拟合第二个短语,在第一个短语适合(name) of the (person)
什么正则表达式适用于这两个短语?
我正在解析源代码文件,我想删除所有行注释(即以"//"开头)和多行注释(即/ .... /).但是,如果多行注释中至少有一个换行符(\n),我希望输出只有一个换行符.
例如,代码:
qwe /* 123
456
789 */ asd
Run Code Online (Sandbox Code Playgroud)
应该完全变成:
qwe
asd
Run Code Online (Sandbox Code Playgroud)
而不是"qweasd"或:
qwe
asd
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?谢谢
编辑:测试的示例代码:
comments_test = "hello // comment\n"+\
"line 2 /* a comment */\n"+\
"line 3 /* a comment*/ /*comment*/\n"+\
"line 4 /* a comment\n"+\
"continuation of a comment*/ line 5\n"+\
"/* comment */line 6\n"+\
"line 7 /*********\n"+\
"********************\n"+\
"**************/\n"+\
"line ?? /*********\n"+\
"********************\n"+\
"********************\n"+\
"********************\n"+\
"********************\n"+\
"**************/\n"+\
"line ??"
Run Code Online (Sandbox Code Playgroud)
预期成绩:
hello
line 2
line 3
line 4
line 5
line 6
line 7 …Run Code Online (Sandbox Code Playgroud) 我看过很多例子,但没有得到预期的结果。
给定一个字符串:
"manikanta, Santhosh, ramakrishna(mani, santhosh), tester"
Run Code Online (Sandbox Code Playgroud)
我想按如下方式获取字符串数组:
manikanta,
Santhosh,
ramakrishna(mani, santhosh),
tester
Run Code Online (Sandbox Code Playgroud)
我尝试了以下正则表达式(来自另一个示例):
"(\".*?\"|[^\",\\s]+)(?=\\s*,|\\s*$)"
Run Code Online (Sandbox Code Playgroud)