从输入中,我想打印出以小写字母(哼声)开头并以0001结尾的行。此外,我想排除那些打印中包含连字符的行(从当前输出中排除最后两行) )。我的猜测是在正则表达式中包含[^ - \ s],这意味着用连字符排除行,但它不起作用。
输入
humabddd001
humhudiwhde001
rehfhfepfhfpehr001oifdjv
iurehfehofewoh001
jfeijjjrefoefojrefoj001
humfiowhewiwihowfhiowfeoewo991
hum0001ofejofrjwoorejfoejfo001
foiwejowjfojfojwofwofjew9032i92i
humifhihweoowhefiwofowfo001
Humerfhofrorr001
HUmhuhdeowhdoewh000001
HUMwifoiewjow001
0001fhdisuhum
hUmfhweoofhwfoh001
humhum001hum
humhumhufih001
humifwje001001
hum30204-439-0942-4029-0001
humouio--hohohoho0001
我的代码
import re
hand = open('D:/Python/Test.txt')
x = hand
for j in x:
h = re.findall('hum.*\S+001+$',j)
# h = re.findall('hum+\S+001+$',j)
if(len(h)>0):
print(h)
我的当前输出
['humabddd001']
['humhudiwhde001']
['hum0001ofejofrjwoorejfoejfo001']
['humifhihweoowhefiwofowfo001']
['humhumhufih001']
['humifwje001001']
['hum30204-439-0942-4029-0001']
['humouio--hohohoho0001']
答案 0 :(得分:0)
使用此正则表达式:^hum[^-]*001$
输出:
['humabddd001']
['humhudiwhde001']
['hum0001ofejofrjwoorejfoejfo001']
['humifhihweoowhefiwofowfo001']
['humhumhufih001']
['humifwje001001']
答案 1 :(得分:0)
dtmp = pd.merge(df[['a']], df_right.groupby('a').mean().reset_index(drop=False), on='a', how='left')
df['b'] = dtmp['b'].values
正如@Patrick Haugh所说,这不需要正则表达式。正确使用import re
hand = open('D:/Python/Test.txt')
x = hand
for j in x:
h = re.findall('^hum[^-]*0001$',j)
if(len(h)>0):
print(h)
,startswith
和endswith
将是完美的。
答案 2 :(得分:0)
我根本不会使用正则表达式。您的要求整齐地落在现有的字符串方法中,并且不够复杂,无法使用正则表达式。
with open('Test.txt') as f:
for line in f:
line = line.rstrip()
if line.startswith('hum') and line.endswith('001') and '-' not in line:
print(line)
打印
humabddd001
humhudiwhde001
hum0001ofejofrjwoorejfoejfo001
humifhihweoowhefiwofowfo001
humhumhufih001
humifwje001001
答案 3 :(得分:0)
问题是您要将否定字符类 [^-\s]
添加到已经包含.*
的模式中,该模式是与 any 匹配的贪婪点模式> 0个或多个字符(换行符除外)。 .*\S+
将匹配换行符以外的任何字符,然后匹配最后一个非空白字符(在这种情况下,+
之后的\S
是多余的)。
另一个问题是re.findall
在字符串内的任意位置 搜索匹配项,但是您只需要在行的开头进行匹配。因此,您需要在模式开始处添加^
锚点,或使用re.match
方法。
以下是您的解决方法:
results = [j for j in x if re.search(r'^hum[^-\s]*001$', j)]
# => ['humabddd001', 'humhudiwhde001', 'hum0001ofejofrjwoorejfoejfo001', 'humifhihweoowhefiwofowfo001', 'humhumhufih001', 'humifwje001001']
请参见Python demo online和regex demo。
详细信息
^
-字符串的开头hum
-文字子字符串[^-\s]*
-0个或更多-
或空格字符001
-一个001
文字子串$
-字符串的结尾。正如Patricks所说,除非您想轻松处理所有Unicode空格,否则您实际上并不需要正则表达式 。在这种情况下,您可以使用
no_regex_results = [j for j in x if j.startswith('hum') and j.endswith('001') and '-' not in j and ' ' not in j]
有点长,不能处理Unicode空格。