可能重复:
非捕获组?
我正在学习JavaScript中的正则表达式,而(?:x)字符或"非捕获括号"对我来说没有意义.如果你不想记住这场比赛,为什么不完全放弃括号呢?使用/(?:x)/而不仅仅是优势是什么/x/?
我是Perl和regex的新手,我需要从文本文件中提取所有字符串.字符串由双引号包装的任何内容标识.
字符串示例:
"This is string"
"1!=2"
"This is \"string\""
"string1"."string2"
"S
t
r
i
n
g"
Run Code Online (Sandbox Code Playgroud)
代码:
my $fh;
open($fh,'<','text.txt') or die "$!";
undef $/;
my $text = <$fh>;
my @strings = m/".*"/g; # this returns the most out "" in example 4
my @strings2 = m/"[^"]*"/g #fixed the above issue but does not take in example 3
Run Code Online (Sandbox Code Playgroud)
编辑:我想获得(1)双引号,然后是(2)零次或多次出现非双引号 - 非反斜杠或反斜杠后跟任何字符,接着是(3)双引号.(2)可以是任何东西,但"
下面提供的正则表达式是m /"(?:\.| [^"])*"/ g但是当它有一条线"string1".string2."string2"时会返回"string1" string2 "string3"
有没有可以跳过之前匹配的单词?
有人可以帮忙吗?
我(?= (?:\d{5}|[A-Z]{2}))在python re示例中看到了一个正则表达式,并对的含义感到非常困惑?:。
我也看到了python doc,有解释:
(?:...)
非捕获版本的常规括号。匹配括号内的任何正则表达式,但是在执行匹配后或在模式中稍后引用后,无法检索到与该组匹配的子字符串。
谁能给我一个例子,并解释它为什么起作用,谢谢!
我试图使用Java正则表达式从以下字符串中提取粗体子字符串:
音乐作品| 与| 作曲家| James Hetfield(音乐家)
我开始使用此代码,但这不起作用.我不确定我错过了什么:
final Pattern pattern = Pattern.compile("| (.+?) (musician)");
final Matcher matcher = pattern.matcher("music works | with | composer | James Hetfield (musician)");
matcher.find();
System.out.println(matcher.group(1)); // Prints String I want to extract
Run Code Online (Sandbox Code Playgroud)
思考?
Java代码:
String imagesArrayResponse = xmlNode.getChildText("files");
Matcher m = Pattern.compile("path\":\"([^\"]*)").matcher(imagesArrayResponse);
while (m.find()) {
String path = m.group(0);
}
Run Code Online (Sandbox Code Playgroud)
串:
[{"path":"upload\/files\/56727570aaa08922_0.png","dir":"files","name":"56727570aaa08922_0","original_name":"56727570aaa08922_0.png"}{"path":"upload\/files\/56727570aaa08922_0.png","dir":"files","name":"56727570aaa08922_0","original_name":"56727570aaa08922_0.png"}{"path":"upload\/files\/56727570aaa08922_0.png","dir":"files","name":"56727570aaa08922_0","original_name":"56727570aaa08922_0.png"}{"path":"upload\/files\/56727570aaa08922_0.png","dir":"files","name":"56727570aaa08922_0","original_name":"56727570aaa08922_0.png"}]
Run Code Online (Sandbox Code Playgroud)
m.group退货
path":"upload\/files\/56727570aaa08922_0.png"
Run Code Online (Sandbox Code Playgroud)
而不是路径的捕获值。我哪里错了?
使用这两个正则表达式regPrefix和regSuffix,
final String POEM = "1. Twas brillig, and the slithy toves\n" +
"2. Did gyre and gimble in the wabe.\n" +
"3. All mimsy were the borogoves,\n" +
"4. And the mome raths outgrabe.\n\n";
String regPrefix = "(?m)^(\\S+)"; // for the first word in each line.
String regSuffix = "(?m)\\S+\\s+\\S+\\s+\\S+$"; // for the last 3 words in each line.
Matcher m1 = Pattern.compile(regPrefix).matcher(POEM);
Matcher m2 = Pattern.compile(regSuffix).matcher(POEM);
while (m1.find() && m2.find()) {
System.out.println(m1.group() + " …Run Code Online (Sandbox Code Playgroud) 我想清理我的熊猫数据框中的电话号码列。我正在使用下面的代码,但它在最后留下了一个括号。我如何获得正确的正则表达式以排除任何额外的字符,例如 ( 或任何不属于电话号码的内容。我已经浏览了旧帖子,但似乎无法找到确切的解决方案。下面的示例代码:
import pandas as pd
df1 = pd.DataFrame({'x': ['1234567890', '202-456-3456', '(202)-456-3456adsd', '(202)-456- 4567', '1234564567(dads)']})
df1['x1'] = df1['x'].str.extract('([\(\)\s\d\-]+)',expand= True)
expected output:
x x1
0 1234567890 1234567890
1 202-456-3456 202-456-3456
2 (202)-456-3456adsd (202)-456-3456
3 (202)-456- 4567 (202)-456- 4567
4 1234564567(dads) 1234564567
Current output :
x x1
0 1234567890 1234567890
1 202-456-3456 202-456-3456
2 (202)-456-3456adsd (202)-456-3456
3 (202)-456- 4567 (202)-456- 4567
4 1234564567(dads) 1234564567(
Run Code Online (Sandbox Code Playgroud) text = "a/NNP b/NNG c/NP d/NNP e/PNG"
Run Code Online (Sandbox Code Playgroud)
我想用'NNP'和'NNG'标签取出单词.
所以我尝试过:
words = re.compile('(\w+/[(NNP)|(NNG)]*)')
t = re.findall(words,text)
Run Code Online (Sandbox Code Playgroud)
但是,结果一直在向我展示
['a/NNP', 'b/NNG', 'c/NP', 'd/NNP','e/PNG'].
How can I get only ['a/NNP','b/NNG','d/NNP']?
Run Code Online (Sandbox Code Playgroud) 我只涉足正则表达式,想知道是否有人可以帮助我制作一个 Java 正则表达式,它与具有以下特性的字符串相匹配:
它应该匹配
但不是
我尝试过以下正则表达式字符串
[a-zA-Z^\\-_]+[\\-_]?[a-zA-Z^\\-_]*
Run Code Online (Sandbox Code Playgroud)
这似乎有效。但是,我不确定如何用这种方法来完成总字符限制部分。我也尝试过
[[a-zA-Z]+[\\-_]?[a-zA-Z]*]{1,14}
Run Code Online (Sandbox Code Playgroud)
但它匹配(例如) abc-cde_aa ,但它不应该匹配。
我正在尝试使用以下代码在PHP中清除字符串,但是我不确定如何在使用空格之前同时删除括号和括号内的文本。
我使用的代码是:
$string = "Deadpool 2 [Region 4](Blu-ray)";
echo preg_replace("/\[[^)]+\]/","",$string);
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
Deadpool [](Blu-ray)
Run Code Online (Sandbox Code Playgroud)
但是,所需的输出是:
Deadpool 2
Run Code Online (Sandbox Code Playgroud)