这按预期工作:
INPUT FILE src.txt:
ffmpeg -i uno.3gp
ffmpeg -i dos.3gp
ffmpeg -i tres.3gp
Run Code Online (Sandbox Code Playgroud)
命令:
sed 's/-i .*\./XXX/' <src.txt
Run Code Online (Sandbox Code Playgroud)
结果如预期:
ffmpeg XXX3gp
ffmpeg XXX3gp
ffmpeg XXX3gp
Run Code Online (Sandbox Code Playgroud)
那么为什么这些不能按预期工作:
命令:
sed 's/-i (.*)\./XXX/' <src.txt
Run Code Online (Sandbox Code Playgroud)
预期:
ffmpeg XXX3gp
ffmpeg XXX3gp
ffmpeg XXX3gp
Run Code Online (Sandbox Code Playgroud)
实际结果:
ffmpeg -i uno.3gp
ffmpeg -i dos.3gp
ffmpeg -i tres.3gp
Run Code Online (Sandbox Code Playgroud)
命令:
sed 's/-i (.*)\.3gp/\1.mp3/' <src.txt
Run Code Online (Sandbox Code Playgroud)
预期:
ffmpeg uno.mp3
ffmpeg dos.mp3
ffmpeg tres.mp3
Run Code Online (Sandbox Code Playgroud)
实际结果
sed: -e expression #1, char 18: invalid reference \1 on `s' command's RHS
Run Code Online (Sandbox Code Playgroud)
括号似乎不适用于分组,但我发现的所有教程和示例似乎都认为它们应该......
来自@avinash-raj 的回答:
re.findall(r'\([^\[\]()]*\[\([^\[\]()]+source=([\w./]+)', s)
Run Code Online (Sandbox Code Playgroud)
修改后的问题:
我有以下字符串:
s=string='s=<a=1 b=[(text1 [(text2 source=x.gz i=i.gz)]), ([(text3 j=1.0 source=y.gz)])] c=[([(3)])] d=[([(source=x.gz)])]>'
Run Code Online (Sandbox Code Playgroud)
我想将此列表作为输出:
['x.gz','y.gz']
Run Code Online (Sandbox Code Playgroud)
原问题:
我有以下字符串:
s=string='s=<a=1 b=[([(source=x.gz i=0)]), ([(j=1 source=y.gz)])] c=[([(3)])]>'
Run Code Online (Sandbox Code Playgroud)
我想将此列表作为输出:
['x.gz','y.gz']
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个:
re.findall(r'b=\[([^]]*)\]',s)
Run Code Online (Sandbox Code Playgroud)
返回:
['([(source=x.gz i=0)']
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个:
re.findall(r'\[([^]]*)\]',s)
Run Code Online (Sandbox Code Playgroud)
返回:
['([(source=x.gz i=0)', '(j=1 source=y.gz)', '([(3)']
Run Code Online (Sandbox Code Playgroud)
我同样很高兴得到一行答案或被指出教程,这使我能够在完成后自己找到答案。谢谢。
EDIT1:更改了字符串(参见下面的答案):
s=string='s=<a=1 b=[([(source=x.gz i=0)]), ([(j=1 source=y.gz)])] c=[([(3)])] source=4>'
Run Code Online (Sandbox Code Playgroud)
EDIT2:更改了字符串(未提供答案,但我会自己提供):
s=string='s=<a=1 b=[(text1 [(text2 source=x.gz i=i.gz)]), ([(text3 j=1.0 source=y.gz)])] c=[([(3)])] d=[([(source=x.gz)])]>'
Run Code Online (Sandbox Code Playgroud)
我试过这个:
re.findall(r'(?<=b=)\[\(.*?[\S]*?source=([\w\./]+)', s)
Run Code Online (Sandbox Code Playgroud)
但它只返回:
['x.gz']
Run Code Online (Sandbox Code Playgroud) decimal d = 2;
int i = (int) d;
Run Code Online (Sandbox Code Playgroud)
我已经多次看到这种情况,其中数据类型被括号括起来。
为什么不直接使用int i = int d;呢?
我有两个字符串:
(123)4567890
1234567890
Run Code Online (Sandbox Code Playgroud)
这对(和)必须同时出现,或两者都省略.目前我使用这个正则表达式:
(?:(?:\(\d{3}\))|(?:\d{3}))\d{7}
Run Code Online (Sandbox Code Playgroud)
其中使用OR到匹配两个案例之一:
\(\d{3}\)
\d{3}
Run Code Online (Sandbox Code Playgroud)
只是好奇,我如何检查(当前比赛的最后一场比赛(有或没有)(检查))?你能建议我另一种方法来达到同样的效果吗?
嗨,我只是想知道为什么
System.out.println((double) 1/4);
Run Code Online (Sandbox Code Playgroud)
打印出0.25
但
System.out.println((double) (1/4));
Run Code Online (Sandbox Code Playgroud)
打印0.0
我的意思是按值拆分,假设列表有 1 个字符串值:
mylist = ["3+4(5-3)-(9+4)"]
我想拆分这些值,使它们成为单独的字符串值,例如: mylist = ["3+4", "(", 5-3", ")", "-", "(", "9-4", ")"]
到目前为止,我附加的以下代码执行相同的操作,但将其拆分为运算符,因此如果我输入["3+3"],它将输出
mylist = ["3", "+", "3"]
import re
mylist = input("Equation: ")
mylist = re.compile("(?<=\d)([- + / *])(?=\d)").split(mylist)
Run Code Online (Sandbox Code Playgroud)
我只是想使它与括号做同样的事情,因为在参数中添加括号会混淆正则表达式语法。
例如下面的代码:
$test_str = 'foo(bar';
@arr = split('(', $test_str);
Run Code Online (Sandbox Code Playgroud)
导致 500 错误
为什么?
关于括号的使用,以下 2 个陈述有什么区别?(没有指针左右)
#define UART1_BAUD (460800)
#define UART2_BAUD 9600
Run Code Online (Sandbox Code Playgroud) Scala 的不可变Set类有一个名为 的方法subsets(),它返回集合的所有子集。
通常空括号方法是为引起副作用的方法保留的,但这个似乎没有。
为什么这个方法不定义为无参数方法?它实际上会引起一些副作用吗?
有时我会看到这样的代码:
#define X1 (13)
#define X2 ((size_t)13)
Run Code Online (Sandbox Code Playgroud)
据我了解,(外部)()在这里是多余的。那是对的吗?
UPD:某些软件开发指南可能需要它。
例如:MISRA C:2004,规则 19.4(必需):
C 宏只能扩展为大括号初始化程序、常量、括号表达式、类型限定符、存储类说明符或 do-while-zero 构造。
然而,MISRA C:2012 有:
#define MY_NULL_2 ( void * ) 0
#define sqrt( x ) ( _BUILTIN_sqrt ( x ) )
Run Code Online (Sandbox Code Playgroud)