好吧,我几乎不了解RegEx基础知识,但为什么他们不能设计它来使用关键字(如SQL)而不是一些神秘的通配符和符号?
它是否因为在运行时解释/解析RegEx而具有性能?(未编译)
或者也许是为了写作的速度?考虑到当你学习一些"简单"的字符组合时,输入1个字符而不是关键字会变得更容易吗?
在Linux上,命令ps aux输出每个stat的多列的进程列表.例如
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
postfix 22611 0.0 0.2 54136 2544 ? S 15:26 0:00 pickup -l -t fifo -u
apache 22920 0.0 1.5 198340 16588 ? S 09:58 0:05 /usr/sbin/httpd
Run Code Online (Sandbox Code Playgroud)
我希望能够在使用Python时读取它,然后拆分每一行,然后拆分每一列,以便它们可以用作值.
在大多数情况下,这不是问题:
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = ps.split('\n')
Run Code Online (Sandbox Code Playgroud)
我现在可以遍历进程以获取每一行并将其拆分为空格
sep = re.compile('[\s]+')
for row in processes:
print sep.split(row)
Run Code Online (Sandbox Code Playgroud)
但是,问题是最后一列命令有时会有空格.在上面的例子中,这可以在命令中看到
pickup -l -t fifo -u
Run Code Online (Sandbox Code Playgroud)
将被拆分为
['postfix', '22611', '0.0', '0.2', '54136', '2544', '?', 'S', '15:26', '0:00', 'pickup', '-l', '-t', …Run Code Online (Sandbox Code Playgroud) 只允许字母的正常正则表达式是"[a-zA-Z]",但我来自瑞典,因此我必须将其改为"[a-zåäöA-ZÅÄÖ]".但是假设我不知道字母表中使用了什么字母.
有没有办法自动知道哪些字符在给定的语言环境/语言中是有效的,还是我应该制作一个我认为我不知道的字符黑名单?
我听过很多PostgreSQL,但我一直想知道你为什么选择它而不是MySQL.什么使它成为"世界上最先进的"并且那些"高级"功能真的重要吗?
在我正在处理的网络应用程序中,我正在捕获onBeforeUnload以询问用户他是否真的要退出.
现在,如果他决定留下来,我想做很多事情.我想弄清楚的是他实际上选择了留下来.
我当然可以声明一个SetTimeout为"x"秒,如果它触发,那么这意味着用户仍然在那里(因为我们没有被卸载).问题是用户可以花时间决定是否留下来......
我首先希望在对话框显示时,SetTimeout调用不会触发,所以我可以设置一个短暂的超时,并且只有在用户选择留下时它才会触发.但是,在显示对话框时会发生超时,因此不起作用.
我尝试的另一个想法是在窗口/文档上捕获mouseMoves.在显示对话框时,mouseMoves确实不会触发,除了一个真正适用于我的情况的奇怪异常,因此也不起作用.
谁能想到其他方法呢?
谢谢!
(如果您好奇,捕获mouseMove不起作用的原因是我的页面中有一个IFrame,其中包含来自另一个域的网站.如果在卸载页面时,焦点位于IFrame内,对话框显示,然后当鼠标从IFrame内部移动到外部时(至少在Firefox中),我得到MouseMove事件触发ONCE.这可能是一个bug,但是,很可能在我们的情况下会发生,所以我不能用这种方法).
我有一个对象列表输出ldapsearch如下:
dn: cn=HPOTTER,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=HGRANGER,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=RWEASLEY,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=DMALFOY,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=SSNAPE,ou=FACULTY,ou=HOGWARTS,o=SCHOOL
dn: cn=ADUMBLED,ou=FACULTY,ou=HOGWARTS,o=SCHOOL
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有以下正则表达式:
/\bcn=\w*,/g
Run Code Online (Sandbox Code Playgroud)
返回结果如下:
cn=HPOTTER,
cn=HGRANGER,
cn=RWEASLEY,
cn=DMALFOY,
cn=SSNAPE,
cn=ADUMBLED,
Run Code Online (Sandbox Code Playgroud)
我需要一个返回如下结果的正则表达式:
HPOTTER
HGRANGER
RWEASLEY
DMALFOY
SSNAPE
ADUMBLED
Run Code Online (Sandbox Code Playgroud)
我需要在正则表达式中进行哪些更改,以便cn=结果中不包含模式(和逗号)?
编辑:我将用于进行sed模式匹配,并将输出传递给其他命令行实用程序.
给出这样的字符串:
<a href="http://blah.com/foo/blah">This is the foo link</a>
Run Code Online (Sandbox Code Playgroud)
...和像"foo"这样的搜索字符串,我想强调HTML文本中出现的所有"foo" - 但不在标签内.换句话说,我想得到这个:
<a href="http://blah.com/foo/blah">This is the <b>foo</b> link</a>
Run Code Online (Sandbox Code Playgroud)
但是,简单的搜索和替换将不起作用,因为它将匹配<a>标记的href中的部分URL.
因此,要以问题的形式表达上述内容:如何限制正则表达式以使其仅匹配HTML标记之外的文本?
注意:我保证有问题的HTML永远不会像任何病态一样:
<img title="Haha! Here are some angle brackets to screw you up: ><" />
Run Code Online (Sandbox Code Playgroud)
编辑:是的,当然我知道CPAN中有复杂的库可以解析最令人发指的HTML,从而减少了对这种正则表达式的需求.在很多场合,这就是我会用的.但是,这不是其中之一,因为保持此脚本简短而没有外部依赖性非常重要.我只想要一行正则表达式.
编辑2:同样,我知道Template :: Refine :: Fragment可以解析我的所有HTML.如果我正在写一个应用程序我当然会使用这样的解决方案.但这不是一个应用程序.它只不过是一个shell脚本.这是一个一次性代码.在这种情况下,作为一个可以传递的单个自包含文件非常有价值."嘿,运行这个程序"是比一个简单得多的指令,"嘿,安装一个Perl模块,然后运行它 - 等等,什么,你以前从未使用过CPAN?好的,运行perl -MCPAN -e shell(最好作为根)然后它会问你一堆问题,但你真的不需要回答它们.不,不要害怕,这不会破坏任何东西.看,你不需要仔细回答每一个问题 - 只要一遍又一遍地进入.不,我保证,它不会破坏任何东西."
现在将上述内容扩展到大量用户,他们想知道为什么他们一直使用的简单脚本不再那么简单,当所有改变的是使搜索词变为粗体时.
因此,虽然Template :: Refine :: Fragment可能是其他人的HTML解析问题的答案,但这不是这个问题的答案.我只想要一个正则表达式,它适用于非常有限的HTML子集,实际上会要求脚本进行解析.
我希望[0-9A-Z]+?以后能够处理所有事情.我有
if [[ `cat file` =~ '[0-9A-Z]+?' ]]; then
echo $BASH_REMATCH;
fi
Run Code Online (Sandbox Code Playgroud)
这给了我第一场比赛,但我怎么能处理文件中的所有比赛?
谢谢
我最近开始创建一个WPF应用程序,我只是希望有人可以向我确认我正在构建我的整体系统架构,或者如果我朝某个方向走错了方向纠正我.特别是因为我正在尝试做MVVM,所涉及的层次很多,而且我不确定我是否正常做事.
以下是系统的简要说明:
数据存储在SQL Server数据库中,可通过Linq to SQL访问.假设数据库包含两个表,USERS并且USER_GROUPS.每个表都有一个自动生成的Linq to SQL类,DB_USER以及DB_USER_GROUP.
现在,在应用程序中,我想显示ListBox与每个ListBoxItem用于显示/修改用户的信息,其使用进行含有各种UI元素DataTemplate.
我有一个窗口的视图模型类,它使用Linq to SQL查询(连接两个表)来填充一个ObservableCollection<User>命名UserList,ListBox窗口中的命名为其命名ItemsSource.User是一个实现的类INotifyPropertyChanged,它处理所有格式化/获取/设置数据库数据到WPF控件所需的内容.处理此代码的代码部分类似于:
DBDataContext db = new DBDataContext();
var allUsers = from user in db.USERs
.Where(u => u.ENABLED == true)
from group in db.USER_GROUPs
.Where(g => g.GROUPID == u.GROUPID)
.DefaultIfEmpty()
select new { user, group };
foreach (var user in allUsers)
{
User u = …Run Code Online (Sandbox Code Playgroud) 我正在回答一些面试的测验问题,问题是如何进行屏幕抓取.也就是说,假设您没有更好的结构化方式直接查询信息(例如Web服务),从网页中挑选内容.
我的解决方案是使用XQuery表达式.表达式相当长,因为我需要的内容在HTML层次结构中非常深入.在找到具有id属性的元素之前,我必须以一种公平的方式搜索祖先.例如,抓取Product Dimensions的Amazon.com页面如下所示:
//a[@id="productDetails"]
/following-sibling::table
//h2[contains(child::text(), "Product Details")]
/following-sibling::div
//li
/b[contains(child::text(), "Product Dimensions:")]
/following-sibling::text()
Run Code Online (Sandbox Code Playgroud)
这是一个非常讨厌的表达,但这就是亚马逊提供Web服务API的原因.无论如何,这只是一个例子.问题不在于亚马逊,而在于屏幕刮擦.
面试官不喜欢我的解决方案.他认为它很脆弱,因为亚马逊改变页面设计可能需要重写XQuery表达式.调试与它所应用的页面中的任何内容都不匹配的XQuery表达式很难.
我并不反对他的陈述,但我认为他的解决方案没有任何改进:他认为最好使用正则表达式,并在运输重量附近搜索内容和标记.例如,使用Perl:
$html =~ m{<li>\s*<b>\s*Product Dimensions:\s*</b>\s*(.*?)</li>}s;
Run Code Online (Sandbox Code Playgroud)
我的反驳是,这也很容易让亚马逊改变他们的HTML代码.他们可能会给在首都(HTML标签<LI>),或者添加CSS属性或更改<b>到<span>或更改标签"产品尺寸:"到"尺寸:"或其他许多种变化.我的观点是正则表达式无法解决他在XQuery解决方案中提到的弱点.
但此外,正则表达式可以找到误报,除非您为表达式添加了足够的上下文.它还可能无意中匹配恰好位于注释,属性字符串或CDATA部分内的内容.
我的问题是,你用什么技术来进行屏幕抓取?你为什么选择这个解决方案?是否有一些令人信服的理由使用它?或者从不使用另一个?除了上面展示的那些之外,还有第三种选择吗?
PS:假设为了论证,没有Web服务API或其他更直接的方式来获取所需内容.