Python中的字符串有一个find("somestring")方法,它返回字符串中"somestring"的索引号.
但是,假设我有一个如下字符串:
"$ 5 $ 7 $ 9总费用:$ 35 $ 14"
我想找到字符串"Total Cost" 之后第一次出现'$'的索引- 我希望能够告诉python,搜索'$',从索引编号开始"总成本",并返回您找到的第一次出现'$'的索引号(相对于整个字符串).find()方法将返回0,并且在这种情况下rfind()将不起作用.
一种克服这种方式的方法如下:
def findStrAfterStr(myString, searchText, afterText):
splitString = myString.split(afterText)
myIndex = len(splitString[0]) + len(afterText) + splitString[1].find(searchText)
return myIndex
myString = "$5 $7 $9 Total Cost: $35 $14"
searchText = "$"
afterText = "Total Cost"
findStrAfterStr(myString, searchText, afterText)
Run Code Online (Sandbox Code Playgroud)
但似乎应该有一种更简单的方法来做到这一点,我认为可能存在,我只是不知道它是什么.思考?
当我发现自己做了很多这样的事情时,这对切片特别有用:
myString[myString.find("startingSubstr"):myString.find("endingSubstr")]
Run Code Online (Sandbox Code Playgroud)
我自然希望"endingSubstr"成为"startingSubstr"之后出现的那个.
我希望匹配多个字符串标准,然后在R中对行进行子集,使用grepl查找匹配.我从另一个帖子中找到了一个很好的解决方案,其中使用了一些特定的代码(但你明白了):subset(GEMA_EO5, grepl(paste(l, collapse="|"),GEMA_EO5$RefSeq_ID))
我想知道是否有可能在两列中grepl,而不是上面的例子中的RefSeq_ID.也就是说,在grepl中通过任何其他方法.换句话说,我想在l中查找选项,而不仅仅是在一列中,而是在两列中(或者多列中).这可能吗?
例如:3列,ab和c.尽管(3,b)中的格式为"T I",但我希望选择T(第3行和第4行)的标准.它应该识别(4,a)和(3,b),因此链接到前一个问题.我希望它在列a和列b中查找,而不是一个或另一个.
a b c
A A C P L
V V B W E E
W T I P J G
T W P J
Run Code Online (Sandbox Code Playgroud) 给定一个带有一些空行的多行字符串,如何迭代Lua中的行,包括空行?
local s = "foo\nbar\n\njim"
for line in magiclines(s) do
print( line=="" and "(blank)" or line)
end
--> foo
--> bar
--> (blank)
--> jim
Run Code Online (Sandbox Code Playgroud)
此代码不包含空行:
for line in string.gmatch(s,'[^\r\n]+') do print(line) end
--> foo
--> bar
--> jim
Run Code Online (Sandbox Code Playgroud)
此代码包含额外的虚假空白行:
for line in string.gmatch(s,"[^\r\n]*") do
print( line=="" and "(blank)" or line)
end
--> foo
--> (blank)
--> bar
--> (blank)
--> (blank)
--> jim
--> (blank)
Run Code Online (Sandbox Code Playgroud) $keywords = array('red', 'blue', 'yellow', 'green', 'orange', 'white');
$strings = array(
'She had a pink dress',
'I have a white chocolate',
'I have a green balloon',
'I have a chocolate shirt',
'He had a new yellow book',
'We have many blue boxes',
'I have a magenta tie');
Run Code Online (Sandbox Code Playgroud)
实际上strings阵列非常庞大(50k +条目).
什么是运行搜索和提取匹配的字符串的最佳方式只?
我需要验证文本标签,但它包含动态部分,所以我尝试使用正则表达式,但它不起作用.
expect(aboutPage.userInterfaceText.getText()).toMatch('/- User Interface: v \d+\.\d+\.\d+/');
Run Code Online (Sandbox Code Playgroud)
我总是得到下一个错误:
- Expected '- User Interface: v 4.4.63' to match '/- User Interface: v d+.d+.d+/'.
Run Code Online (Sandbox Code Playgroud) 我需要使用python有效地匹配一个非常大的关键字列表(> 1000000).我发现一些非常好的库试图快速完成这个:
1)FlashText(https://github.com/vi3k6i5/flashtext)
2)Aho-Corasick算法等
但是我有一个特殊的要求:在我的上下文中,如果我的字符串是'XXXX是YYYY的非常好的指示',则关键字'XXXX YYYY'应该返回匹配.请注意,'XXXX YYYY'不是作为子字符串出现的,但字符串中存在XXXX和YYYY,这对我来说足够好了.
我知道如何天真地做到这一点.我正在寻找的是效率,为此更好的图书馆?
python string pattern-matching string-matching keyword-search
我想检查句子中是否存在特定字符串.我为此目的使用简单的代码
subStr = 'joker'
Sent = 'Hello World I am Joker'
if subStr.lower() in Sent.lower():
print('found')
Run Code Online (Sandbox Code Playgroud)
这是一种简单直接的方法,但当句子出现时它会失败
你好世界我是Jo ker
你好世界我是J oker
当我从PDF文件中解析句子时,会有一些不必要的空间来到这里.
解决此问题的一种简单方法是从句子中删除所有空格并查找子字符串匹配.我想知道其他人对此的想法,我应该坚持这种方法还是寻找其他一些选择.
我有一组短信。让我们打电话给他们吧m1, m2, ....。消息的最大数量如下1,000,000。每条消息1024的长度都低于字符,并且全部为小写。我们还可以选择一个 n-gram s1。
我需要从所有这些消息中找到所有可能的子字符串的频率。例如,假设我们只有两条消息:
m1 = a cat in a cage
m2 = a bird in a cage
Run Code Online (Sandbox Code Playgroud)
这两条消息中某些 n 元语法的频率:
'a' = 4
'in a cage' = 2
'a bird' = 1
'a cat' = 1
...
Run Code Online (Sandbox Code Playgroud)
请注意,由于in = 2、 、in a = 2和a cage = 2是 和 的子集in a cage = 2,并且具有相同的频率,因此不应列出它们。只取最长的、频率最高的;遵循以下条件:最长的 sn-gram 最多由 8 个单词组成,总字符数低于 30。如果 n-gram 超过此限制,则可以将其分解为两个或多个 n-gram 并单独列出。 …
我目前正在处理一个非常大的位置数据库,并试图将它们与它们的真实世界坐标相匹配.
为此,我下载了包含大量条目的geoname数据集.它给出了可能的名称和纬度/经度坐标.为了尝试加快这个过程,我设法通过删除对我的数据集没有意义的条目,将巨大的csv文件(1.6 GB)减少到0.450 GB.它仍然包含400万个条目.
现在我有很多条目,例如:
知道字符串匹配这么长的字符串,我通过NLTK 使用Standford的NER来获得更好的字符串来限定我的位置.现在我有类似的字符串:
geoname数据集包含以下内容:
我正在应用这个算法来获得我的条目和包含4M条目的geoname csv之间的良好匹配.我首先阅读geoname_cleaned.csv文件并将所有数据放入列表中.对于我有的每个条目,我然后string_similarity()在当前条目和geoname_list的所有条目之间调用我的每个条目
def get_bigrams(string):
"""
Take a string and return a list of bigrams.
"""
s = string.lower()
return [s[i:i+2] for i in list(range(len(s) - 1))]
def string_similarity(str1, str2):
"""
Perform bigram comparison between two strings
and return a percentage match in …Run Code Online (Sandbox Code Playgroud) python language-agnostic algorithm performance string-matching
我想做的事
我有许多唯一的 ID,例如id1, id2, etc.。它们出现在多个组中,每个组都是 1 到 100 个 id 之间的随机样本,例如
[1] "id872- id103- id746-"
[2] "id830- id582-"
[3] "id663- id403- id675- id584- id866- id399- id28- id550-"
Run Code Online (Sandbox Code Playgroud)
我想找到一个id所属的所有组,例如id1
groups.with.id[1] = grep("id1-", groups)
Run Code Online (Sandbox Code Playgroud)
我的问题
数据量很大(80k id,1M 个组),在我的笔记本电脑上大约需要12 个小时。我认为这是我正在执行 80k 次(每个 id 一次)以及每次访问一个巨大对象(1M 组)的事实的组合。
有什么办法可以提高效率吗?
(我经常遇到 REg 中较大对象的问题,重复索引具有 >10k 行的数据帧会变得非常慢。也赞赏大型对象的有效索引的一般答案!)
示例代码
# make toy dataset
n.ids = 80000 # number of unique ids
n.groups = 100 # number of groupings
# make data
ids = …Run Code Online (Sandbox Code Playgroud) string-matching ×10
string ×6
python ×4
algorithm ×2
r ×2
arrays ×1
jasmine ×1
javascript ×1
large-data ×1
lua ×1
lua-patterns ×1
performance ×1
php ×1
protractor ×1
python-3.x ×1
regex ×1
substring ×1