e*******o 发帖数: 4654 | 1 ^ 的意思是在\n 之后。 $的意思是在\n之前。
a\n\n\nb
a\n 不match:
\s* 吃掉\n\n,后面是b,不行,吐出一个\n,match1次,吐出n后,前是\n,后面\n,
又match 一次,一共match两次。
a\n\n\n\s\nb:
\s* 吃掉\n\n\s\n,后面是b,不行,吐出一个\n,match1次,吐出n后, 前面是\s, 不
行, 剩下的一个n不match。一共match一次。
水平比较次,不知道说清楚没有。
用这个
https://metacpan.org/pod/Regexp::Debugger
rxrx your_scripts.pl
然后 按n,可以看动态的看怎么匹配的。 |
|
x**n 发帖数: 1055 | 2 一看您的说话方式(吃-吐)就知道是大牛,谢谢指点:-) |
|
z****e 发帖数: 54598 | 3 语言当然是java,我最擅长的还是java哈
第一种就是wwzz说的直接上api
第二种是正则表达式,这个我也不熟练
第三种我自己分步骤实现,有什么难的
实现题,怎么做都随便你,大不了说慢一点
总比做出来是错的强太多
我这不是还没10年的java经验么?
呵呵 |
|
|
D*****r 发帖数: 6791 | 5 算吧,了解了之后,就知道compiler背着自己到底本质上在干什么,或者说知道自己到
底在干什么。
有些理论的东西,什么各种自动机啊,正则表达式啊,知道一下好像有帮助。 |
|
k*******3 发帖数: 1909 | 6 如果要匹配 数字-数字,并且两个数字相同。比如匹配
1-1
2-2
3-3
4-4
而不要匹配
1-2
3-4
5-9
如何写正则表达式? |
|
n*******e 发帖数: 4894 | 7 replace \D with ""
这样应该可以吧 |
|
w***g 发帖数: 5958 | 8 grep -o '"id":[0-9]\+' | cut -f 2 -d ':'
要数 |
|
n*******e 发帖数: 4894 | 9 嗯,perl里用 =~ /^"id":(\d+)/应该就可以了,好久没用,快忘得差不多了 |
|
|
h*d 发帖数: 214 | 11 come on,这个板上就没有人真正知道regex?还group, capture什么的,让我跌眼镜啊 |
|
|
h*d 发帖数: 214 | 13 问题就是需要用吗?LZ问的问题其实是很简单的例子 |
|
e*******o 发帖数: 4654 | 14 我只是跟楼主说,有个知识点他不知道,要看看。
简单的方法不是给出来了么。 |
|
w***g 发帖数: 5958 | 15 受教了,grep版本为
grep -P -o '(?<="id":)[0-9]+' |
|
h*d 发帖数: 214 | 16 最简单写法,\d+
会有两个match,第一个就是lz要的
稍微复杂点,(?<="id"\:)\d+,就match第一组数字 |
|
e*******o 发帖数: 4654 | 17 至少你不知道Perl中regex 怎么用,所以在嘲笑别人的时候还是小心为妙。 |
|
h*d 发帖数: 214 | 18 对,我就是嘲笑那些说要用group的。perl中怎么用我不关心,不过肯定不需要group,
哈哈哈 |
|
|
D***n 发帖数: 6804 | 20 有几个基本的东西你要看:
Computer architecture 计算机体系结构(不用看太懂,知道计算机大概怎么工作的就
行了)
语言方面,重点要看这本书:
Compilers: Principles, Techniques, and Tools
配合这本书有:
Python的PLY ( Python的Lex/Yacc)
C语言,特别要实践一下如何用C语言实现OOP
这个书里面详细地实现了正则表达式,特别有用。
一旦你了解这些语言具体在机器那里是怎么实现的,很多东西就很通透了。然后你就会
发现Python/C/C++是个桌面/服务器很好的组合:) |
|
s***o 发帖数: 175 | 21 \/(.+?)\/(.+*)\/(.+*)
groups: \1 \2 |
|
s***o 发帖数: 175 | 22 sorry, 少打了个问号,应该是:
\/(.+?)\/(.+*?)\/.+* |
|
e********2 发帖数: 495 | 23 int i = s.find('/');
int j = s.find('/');
return s.substr(i+1, j);
差不多这样。 |
|
e*******o 发帖数: 4654 | 24 Perl 中可以用split,
如果不用none-greedy 可以用 [^/]* |
|
d******i 发帖数: 7160 | 25 比如下面这个匹配电话号码 (123) 456-7890 的写法(lc接受的正确版):
grep '([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}' file.txt
显然()和{}是本身默认为token,需要转义才做语义符的。
而[]是本身默认为语义符,需要转义才做token的。
为啥不能把语法统一了呢?
请过来人指教。
谢谢! |
|
|
d******i 发帖数: 7160 | 27 大哥,正是不想折腾才有OP的问题。
加P试了,没有啥区别啊。
还是一样的问题:转义的默认项不一致。 |
|
n******7 发帖数: 12463 | 28 你到底试了没?
-> grep '([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}' test
(123) 456-7890
-> grep -P '([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}' test
-> grep -P '\([0-9]{3}\) [0-9]{3}-[0-9]{4}' test
(123) 456-7890
-> grep -P '\(\d{3}\) \d{3}-\d{4}' test
(123) 456-7890
不知道为啥,贴出来的backslash都没了,要修改才好 |
|
n******7 发帖数: 12463 | 29 不好说那个标准,不过我只用perl的,减少记忆负担和错误
python的regexp跟perl的也一样
我记得哪里看到过一个不同版本的regexp语法对照表,vim用的是basic regular
expression
grep自己有一套,但是可以兼容其他几类,编程语言perl风格是主流
还好我不用很多regexp的东西,不然这种回字几种写法的事情要搞死人 |
|
d******i 发帖数: 7160 | 30 多谢,之前没写对。
perl style的还是要清新些。 |
|
t*****n 发帖数: 4908 | 31 http://www.csdn.net/article/2015-08-28/2825572
简单讲,原文http://eax.me/cpp-will-never-die/是俄语,有人感兴趣,得到作者同意后,把它翻成英文。(译者:然后我再把它翻成中文。)
显而易见,这篇博文将会导致一场语言大圣战,所以,请思考两遍,确定你将会通过“
有建设性的辩论”的评论参与讨论后再开始阅读这篇文章。
再次说明原文是俄语:)
注意:进一步讲,我冒昧的认为Rust有意尝试创建一个快速并且安全的语言。毕竟,
Mozilla的人最初构思用它作为工具来开发一个浏览器引擎。如果它被证明是另外一个
仅仅安全的语言,那么我认为 它没有达成目标。那里有许多非常不同的安全语言供人
们选择和品味,如果Rust没有打算代替C++,那么:
为什么它需要包含一个不安全子集;
并且,为什么作者要抛弃Rust的轻量级进程?毕竟它们很方便,对吧?换句话说,
如果我假设错了,那么整件事情就没有讨论的意义了。
如有你碰巧偶尔逛逛linux.org.ru论坛,那么请被提醒到这篇文章没有触及为什么不喜
欢Rust的那10条纯技... 阅读全帖 |
|
N********n 发帖数: 8363 | 32
看考官奔着啥去的。如果就是要考编译原理基础这里的名堂多了。如果只是来个
简单正则表达式拆分然后糙快猛解析,你楼上那个可能就差不多了。 |
|
R*********4 发帖数: 293 | 33 我建议您学学正则表达式
不管js php c# Python 都支持
也就是regex |
|
h**********c 发帖数: 4120 | 34 [a-zA-Z] a kind type sort of wild card
plus grouping,
should do
viewer discretion advised. |
|
r*g 发帖数: 186 | 35 我在vim下会这样
/\c.*\(.\).*\1
能找出来 |
|
|
H**r 发帖数: 10015 | 37 忽略大小写应该是wildcard+随便什么东西+backreference最后i(或者别的什么ignore
casesensitive)之类的吧?
具体的我也记不清了 |
|
h**********c 发帖数: 4120 | 38 cat test.txt | "egrep -i (.).*\1"
It should do the job.
You can read at least one character matching wild-card is repeated.
I can not figure out what the regular grammar would be for repetition. In
fact grep is an NFA, probably a push-down automaton.
If you can not write grammar rules, the language is not well defined,
possibly incomplete and leaving bug in programs.
ignore |
|
w***g 发帖数: 5958 | 39 如果我没有记错的话, 一般说来你这个要求regular expression 搞不定.
regular expression是Type-3 language, 你要的这个是
context-free language, 是type-2 language.
如果if永远像你说的这样嵌套两层的话还是可以写的. |
|
c******n 发帖数: 16666 | 40 我虽然也说过用regex来做html parser的笑话
但第一次知道 原来还有type2 type3这种 |
|
发帖数: 1 | 41 if((?!if).)*else
如果考虑换行的话 用这个
if((?!if).|\s)*else |
|
发帖数: 1 | 42 if(((?!if).)*)else
if(((?!if).|\s)*)else
这个提取 group[1] |
|
n*********u 发帖数: 1030 | 43 for first match,
`if(.*?)else`
but nested stuff can get it wrong really easily. |
|
|
d******c 发帖数: 2407 | 45 重点首先应该在DSL设计上,DSL设计不同,适合用来实现的语言就可以有很大不同,离
开DSL谈语言,相当于一次考虑两件事。
martin fowler在这方面写过很多文章。
https://martinfowler.com/dsl.html
看看他举得例子,regex,CSS,make, ant,哪个是“类似英语的一种标识法”?
和英语的相似性不是重点,适当的抽象才是重点。首先要找到最适合的抽象,所以正则
表达式定义了那么多东西,相当于特定的名词和动词。 |
|
|
d******c 发帖数: 2407 | 47 这实际是data cleaning,就你举得例子来看,这个问题很难。
地址的标准化就很难,美国地址算是非常规律的了,但是地区性差异很大。我读过usps
关于地址的manual,很多东西一般人不知道。
- 有两个州用坐标,也就是在xy轴上划区,然后每个地址都带个这种坐标,比如Q5,C3
- NY的地址最头疼,因为数字街名简写了以后很多时候很难区分。
- 有许多地址只有当地人才能解析
一般的办法也就是用正则表达式,模糊匹配,全是经验性的。
至于后面什么北电的例子,这种缩写也不容易。
说起来这种问题是适合ML/DL处理的,问题是DL全靠数据,你有足够大的训练集吗?标
记好的数据? |
|
d******c 发帖数: 2407 | 48 我提点不同意见
前两天刚有个讨论
https://news.ycombinator.com/item?id=16322277
那个原作者是生物信息的,数据量上去的很快,python的性能经常遇到瓶颈。
性能是很复杂的问题,一般人感觉python性能还可以,但是生物方面的数据量和任务和
一般人编程可能很不一样(对几十G的文本搞查找或者正则表达式)。
总有人说把关键部分用C,然后和python通讯,但混合编程坑很多,很繁琐
python在ML, DS的火跟太多人改行,太多人背景太杂有关,python上手快。
作为接口语言python肯定是可以的,但我觉得C本来就是你的一个竞争优势,能做到性
能上的优势是个很大的卖点,只要外部包装,性能不关键的地方用python就可以了。这
种划分不是混合编程,而是python只做接口外的东西。 |
|
g****t 发帖数: 31659 | 49 除了性能。Python做数值计算仍然有很多问题。
ML/AI做system level整合现在看来必须是python。
做稍微底层点的东西不可行。
: 我提点不同意见
: 前两天刚有个讨论
: https://news.ycombinator.com/item?id=16322277
: 那个原作者是生物信息的,数据量上去的很快,python的性能经常遇到瓶
颈。
: 性能是很复杂的问题,一般人感觉python性能还可以,但是生物方面的数
据量和
任务和
: 一般人编程可能很不一样(对几十G的文本搞查找或者正则表达式)。
: 总有人说把关键部分用C,然后和python通讯,但混合编程坑很多,很繁琐
: python在ML, DS的火跟太多人改行,太多人背景太杂有关,python上手快。
: 作为接口语言python肯定是可以的,但我觉得C本来就是你的一个竞争优
势,能
做到性
: 能上的优势是个很大的卖点,只要外部包装,性能不关键的地方用python
就可以
了。这
|
|
|