正则表达式不适用于re.findall

时间:2015-04-27 08:53:45

标签: python regex

我有一个格式为

的unicode字符串

我有这个unicode字符串:

unistr= [something::a.b.c][someotherthing::e.f.g]

我试着编写一个只接受"::"分隔符之前和之后的字符串的正则表达式。 我尝试使用我的字符串在一个在线正则表达式构建器中测试这个正则表达式:([\w\.]).+?(?=\:\:),它给了我想要的结果。

但是当我把它包装在这个re.findall函数中时,它并没有给我相同的结果。它给出了[c,g] 这就是我试过的:

re.findall(r'([\w\.]).+?(?=\:\:)',unistr) #to get the string before "::"
re.findall(r'.+?([\w\.]\:\:)',unistr) # to get after "::"

我做错了什么?

5 个答案:

答案 0 :(得分:1)

我认为你以某种方式测试了它。我使用此表达式修改了它:([\w\.])+而不是Pythex,它抓取了两个组,someotherstringe.f.g,这是我认为你想要的,对吗?

答案 1 :(得分:1)

我认为您需要使用var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope, $timeout) { $scope.triggerReset = function () { $scope.reset = true; console.log('reset') $timeout(function() { $scope.reset = false; },100) } }); app.directive("counterWidget",function(){ return{ restrict:"E", scope:{ startnumber: '=', resetter: '=' }, link:function(scope,elem,attr){ scope.f = 1; scope.add = function(f){ this.f ++ } scope.reset = function(){ scope.$parent.triggerReset() } scope.$watch(function(attr) { return scope.resetter }, function(newVal) { if (newVal === true) { scope.f = 100; } }) }, template:'<li ng-repeat="item in [1,2,3]">'+ "<button ng-click='add(f)'>+</button>"+ "{{f}}&nbsp&nbsp&nbsp"+ "<button ng-click='reset()'>reset</button><br><br>"+ '</li>' } }) finditer正则表达式来获取方括号内的([^\[]*)\:{2}([^\]]*)分隔内容:

::

输出sample program

import re
unistr = u'unistr= [something::a.b.c]'
print [[x.group(1), x.group(2)] for x in re.finditer(ur'([^\[]*)\:{2}([^\]]*)',unistr)]

答案 2 :(得分:1)

您可以使用以下内容:

import re
unistr= 'something::a.b.c'
print re.findall(r'^.+?(?=::)',unistr)
print re.findall(r'(?<=::).+?$',unistr)

输出:

['something']                                                                
['a.b.c']  

答案 3 :(得分:1)

使用此:

unistr= '[something::a.b.c][someotherthing::e.f.g]'
map(lambda v: v.split('::'), re.findall(r'\w+\:\:[\w\.]+', unistr))

输出:

Out[412]:
[['something', 'a.b.c'], ['someotherthing', 'e.f.g']]

答案 4 :(得分:1)

我不会让事情变得复杂,这会有效:

re.findall(r'(\w+)::', unistr)

它匹配单词字符后跟::并捕获它,返回包含所有匹配项的列表。

请注意,:不是特殊字符,不应转义。