标签: python-re

通过带有 re.sub 的 python dict 得到缩写的 python 子状态名称

我有一个数据框,其中有一列包含州名称。这些名称是官方缩写、部分拼写和完整州名的混合体。

d = pd.DataFrame(['fla', 'fl', 'del', 'ohio', 'calif', 'ca', 'del', 'texas', 'miss', 'tx', 'new mex'],
                 columns = ["state"])
Run Code Online (Sandbox Code Playgroud)

这里有一个带有状态缩写和名称的Python字典:https ://code.activestate.com/recipes/577305-python-dictionary-of-us-states-and-territories/

我想查看数据帧d并找到 中的最佳匹配dict并替换 中的值d['state']。我认为我不想使用,replace因为我想替换“整个单词”而不是子字符串。期望的结果:

d = ['fl', 'fl', 'de', 'oh', 'ca', 'ca', 'de', 'tx', 'ms', 'tx', 'nm']
Run Code Online (Sandbox Code Playgroud)

将字典直接加载到我的控制台中并调用它states_dict,我尝试了以下操作(根据此地图将美国州名映射到字典中单独给出的两个字母缩写词

d['state'] = d['state'].map(states_dict)
Run Code Online (Sandbox Code Playgroud)

nan它为我的数据框中的每个条目生成d.

任何帮助将非常感激。

谢谢。

python regex text dictionary python-re

3
推荐指数
1
解决办法
3878
查看次数

Python 搜索字符串包含字符

我有以下数据:

col1      
086945159
549615853
589ac2546
GED456231
F56hy8W12
Run Code Online (Sandbox Code Playgroud)

我想查找是否col有非数字值并返回。

col1         col2 
086945159    086945159
549615853    549615853
589ac2546    Nan
GED456231    Nan
F56hy8W12    Nan
111111111    Nan
222222222    Nan
Run Code Online (Sandbox Code Playgroud)

re.search(r'[^0-9]+', str)以前找过。但是,我如何在 in 中使用它,apply()因为如果 incol中的值具有相同的数字,例如11111111and 222222222,则这应该返回Nan.

python regex data-manipulation pandas python-re

3
推荐指数
1
解决办法
52
查看次数

如何将 Python 中的所有 unicode 小写字符与正则表达式匹配?

我正在尝试编写一个与 Python 3 中的 Unicode 小写字符匹配的正则表达式。我正在使用该re库。例如,re.findall(some_pattern, 'u\xe2\x88\x8f\xc3\xb1K\xce\xb8') 应该返回['u', '\xc3\xb1', '\xce\xb8'].

\n

在 Sublime Text 中,我只需键入即可[[:lower:]]找到这些字符。

\n

我知道 Python 可以使用 匹配任何 Unicode 字符re.compile('[^\\W\\d_]'),但我特别需要区分大写和小写。我也知道它re.compile('[a-z]')会匹配任何 ASCII 小写字符,但我的数据是 UTF-8,并且它包含许多非 ASCII 字符\xe2\x80\x94我检查过。

\n

Python 3 中的正则表达式可以实现这一点吗?还是我需要采取替代方法?我知道其他方法可以做到这一点。我只是希望使用正则表达式。

\n

python regex unicode python-3.x python-re

3
推荐指数
1
解决办法
1125
查看次数

正则表达式搜索列表,但返回相同大小的列表

与此问题类似:正则表达式:在列表中搜索

但我想返回搜索列表的大小相同的列表,None''在没有比赛:

import re

mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
r = re.compile(".*cat")
list(filter(r.match, mylist)) 

# looking for  ["", "cat", "wildcat", "thundercat", "", ""]
Run Code Online (Sandbox Code Playgroud)

我尝试删除filter但返回整个列表

也试过

[r.match(x) for x in mylist]
Run Code Online (Sandbox Code Playgroud)

但这会返回:

[None,
 <regex.Match object; span=(0, 3), match='cat'>,
 <regex.Match object; span=(0, 7), match='wildcat'>,
 <regex.Match object; span=(0, 10), match='thundercat'>,
 None,
 None]
Run Code Online (Sandbox Code Playgroud)

我不知道如何提取字符串

.group(0) 引发错误 None

任何一种方法都有效,优先选择更快/更有效的方法,因为列表会很长

python list-comprehension python-re

3
推荐指数
2
解决办法
67
查看次数

如何在Python中使用正则表达式获取前导零的所有索引

在 Python 中使用正则表达式(库 re(仅)),我想创建一个函数,该函数给出字符串中所有前导 0 的位置。

例如,如果字符串是:我的房子有 01 个花园和 003 个房间。我希望函数返回 13、27 和 28。

我尝试过例如:

import re
string = "My house has 01 garden and 003 rooms."
pattern = "(0+)[1-9]\d*"

print(re.findall(pattern,string))
Run Code Online (Sandbox Code Playgroud)

显然,输出给了我匹配但没有位置......

python regex python-re

3
推荐指数
1
解决办法
86
查看次数

Python - 用正则表达式模式替换 DataFrame 中列表中的单词

我有以下列表和 DataFrame:

mylist = ['foo', 'bar', 'baz']
df = pd.DataFrame({'Col1': ['fooThese', 'barWords', 'baz are', 'FOO: not', 'bAr:- needed'],
                   'Col2': ['Baz:Neither', 'Foo Are', 'barThese', np.nan, 'but this is fine']})
Run Code Online (Sandbox Code Playgroud)

如果在 DataFrame 中找到,我想替换 mylist 中的字符串。我可以使用以下正则表达式模式替换一些:

pat = '|'.join([r'\b{}'.format(w) for w in mylist])
df2 = df.replace(pat, '', regex=True)
Run Code Online (Sandbox Code Playgroud)

但是,这并没有放置所有实例。我想要的输出如下:

    Col1     Col2
0   These    Neither
1   Words    Are
2   are      These
3   not      NaN
4   needed   but this is fine

Run Code Online (Sandbox Code Playgroud)

python regex replace pandas python-re

2
推荐指数
1
解决办法
435
查看次数

当字符串中有多个逗号时,保留字符串中每个逗号后面的第一个单词

您好,我需要在每个逗号后的分隔符后删除一个单词。例如,如果列中的第一个索引是

'stack overflow, ask question , keep remove'
Run Code Online (Sandbox Code Playgroud)

(注意,它们都是一蜇)

我需要的输出是,

'stack, ask, keep'
Run Code Online (Sandbox Code Playgroud)

(这是在一个字符串中)

因此保留第一个单词,并删除每个逗号后的其余单词。我使用了 .split 但没有得到结果。这是我的方法,

 final_re= [mydf.mycolumn.str.split(' ')[index][0] for index in range(0, len(mydf))]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它保留第一个单词,这意味着如果输入是

'stack overflow, ask question , keep remove'
Run Code Online (Sandbox Code Playgroud)

我的输出只是

'stack'
Run Code Online (Sandbox Code Playgroud)

但是,我需要输出是

'stack, ask, keep'
Run Code Online (Sandbox Code Playgroud)

我很感激任何建议。

python pandas python-re

2
推荐指数
1
解决办法
596
查看次数

按数字字母分割

我想将 'E100N05' 拆分为 ['E100', 'N05'] ,因此在数字变成字母 N、E、S 或 W 后进行拆分。字母后面的位数可以不同。

import re
re.split('[NSEW$*]', 'E100N05')
Out[8]: ['', '100', '05']

What I want : ['E100','N05']
Run Code Online (Sandbox Code Playgroud)

我应该使用哪种模式?

python regex string python-3.x python-re

2
推荐指数
1
解决办法
54
查看次数

使用 re 进行分子分解

我想创建一个字典来拆分分子式的所有元素。我尝试使用 re 模块

Formula="C16H21NO2Na3"

pat = re.compile('(?P<name>[A-Z][a-z]+)\[0-9]+(?P<name2>[0-9]+)')
molecule= pat.findall(Formula)
print (molecule)
Run Code Online (Sandbox Code Playgroud)

我期望这个回报:

{'C': 16, 'H': 21, 'N': '', 'O': 2, 'Na': 3}
Run Code Online (Sandbox Code Playgroud)

python molecule python-re

2
推荐指数
1
解决办法
80
查看次数

re.finditer 有一定的长度,但我无法迭代它

以下代码块有效,对我来说似乎相当合法。字符串中有TP两次TP Tutorials Point TP,因此匹配数应为 2。此外,对该列表的迭代也应该有效。

s = 'TP Tutorials Point TP'

out = re.findall(r'TP', s)

assert len(list(out)) == 2

# this loop will print 2 times matched string
for m in out:
    print(m)
Run Code Online (Sandbox Code Playgroud)

但这是怎么回事?

s = 'TP Tutorials Point TP'

out = re.finditer(r'TP', s)

# seems OK so far
assert len(list(out)) == 2

# !!! no output here !!!
for m in out:
    print(m)
Run Code Online (Sandbox Code Playgroud)

为什么我无法迭代finditer方法的返回输出?在下一篇文章中表明,这finditer也应该有效。我的Python版本:3.8.10

python python-re

2
推荐指数
1
解决办法
230
查看次数